软件体系结构实验报告文档格式.docx
- 文档编号:6267290
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:48
- 大小:355.38KB
软件体系结构实验报告文档格式.docx
《软件体系结构实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《软件体系结构实验报告文档格式.docx(48页珍藏版)》请在冰点文库上搜索。
程序流程图如下:
登录界面显示
此登录界面是预先设定好作为菜单来显示的,在主函数中以menu()来实现的,在函数中,是通过switch……case来实现选择功能的,用户可以通过需要进行选择,方便了用户的使用,非常人性化。
登记学生资料
当系统中没有保存学生信息时,就会提示没有学生记录!
也就是说不能从文件中导出,这时就需要用户进行学生资料的导入,当输入的学号已经存在时,系统会提示用户重新输入一个未被占用的学号信息,否则就重新分配内存空间。
保存学生资料
该操作是将用户输入的学生信息进行保存,用文件的方法进行调试,当用户输入对象的个数超过0时,显示保存成功,否则提示,系统连接为空。
删除学生资料
删除后结果紧随其后
这里又是通过switch……case函数的调用,让用户进行选择,共有两种方法:
1.按照学号2.按照姓名,操作完成后,系统会自动提示,该学生已经成功删除,当再次显示的时候,函数中的链表就不再指向该学号,从而起到删除的作用。
删除完成后,再次保存一下学生资料,不然系统仍然默认为原始人数。
修改学生资料
通过选择到达修改界面:
此时将呈现出现有的学生资料,按照要求将新的信息输入其中,再保存资料,如果输入的学号系统中未显示,那么系统则提示没有资料可以修改。
这个为修改完的图片
查询学生资料
按照选择,则会呈现出用户需要查找的所有信息,每次呈现出来的时候都要用之前定义的printheader()函数,这个很好地将数据按照格式化的形式显现出来。
此为按照学号查找的例子,按照姓名查找是同样道理。
统计学生资料
统计学生资料主要还是用的switch……case函数,通过选择,用printheader(),printdata(r),printf(END)等函数用表格的形式将符合条件的学生信息全部显示出来,不过唯一不足的就是所有的学生信息没有能够连贯起来,每个学生信息前面都有表头,没处理好。
对学生资料进行排序
该图显示的是按照语文成绩排序完的结果,用链表将数据进行一个接一个的比较,按照降序将学生信息排列下来,最后提示排序已经完成,并将所有结果按照用户要求显示出来。
程序主要代码
#include"
stdio.h"
/*标准输入输出函数库*/
stdlib.h"
/*标准函数库*/
string.h"
/*字符串函数库*/
conio.h"
/*屏幕操作函数库*/
#defineHEADER1"
----------------------------学生成绩----------------------------\n"
#defineHEADER2"
|学号|姓名|语文|数学|英语|总分|均分|\n"
#defineHEADER3"
|---------------|---------------|----|----|----|--------|-------|"
#defineFORMAT"
|%-10s|%-15s|%4d|%4d|%4d|%4d|%.2f|\n"
#defineDATAp->
data.num,p->
data.name,p->
data.egrade,p->
data.mgrade,p->
data.cgrade,p->
data.total,p->
data.ave
#defineEND"
--------------------------------------------------------------\n"
intshoudsave=0;
/**/
structstudent
{
charnum[10];
/*学号*/
charname[20];
charsex[4];
intcgrade;
intmgrade;
integrade;
inttotal;
floatave;
charneartime[10];
/*最近更新时间*/
};
typedefstructnode
structstudentdata;
structnode*next;
}Node,*Link;
voidmenu()
system("
cls"
);
/*调用DOS命令,清屏.与clrscr()功能相同*/
cprintf("
\n"
学生成绩管理系统\n\n"
*************************菜单**************************\n"
*1登记学生资料2删除学生资料*\n"
*3查询学生资料4修改学生资料*\n"
*5插入学生资料6统计学生资料*\n"
*7排序学生资料8保存学生资料*\n"
*9呈现学生资料0退出系统*\n"
*******************************************************\n"
/*cprintf()送格式化输出至文本窗口屏幕中*/
}
voidprintheader()/*格式化输出表头*/
printf(HEADER1);
printf(HEADER2);
printf(HEADER3);
voidprintdata(Node*pp)/*格式化输出表中数据*/
Node*p;
p=pp;
printf(FORMAT,DATA);
voidWrong()
printf("
\n=====>
提示:
输入错误!
voidNofind()
没有找到该学生!
voidDisp(Linkl)/*显示单链表l中存储的学生记录,内容为student结构中定义的内容*/
Node*p;
p=l->
next;
/*l存储的是单链表中头结点的指针,该头结点没有存储学生信息,指针域指向的后继结点才有学生信息*/
if(!
p)/*p==NULL,NUll在stdlib中定义为0*/
没有学生记录!
getchar();
return;
\n\n"
printheader();
/*输出表格头部*/
while(p)/*逐条输出链表中存储的学生信息*/
printdata(p);
p=p->
/*移动直下一个结点*/
/*************************************************************
作用:
用于定位链表中符合要求的节点,并返回指向该节点的指针
参数:
findmess[]保存要查找的具体内容;
nameornum[]保存按什么查找;
在单链表l中查找;
**************************************************************/
Node*Locate(Linkl,charfindmess[],charnameornum[])/*该函数用于定位连表中符合要求的接点,并返回该指针*/
Node*r;
if(strcmp(nameornum,"
num"
)==0)/*按学号查询*/
r=l->
while(r!
=NULL)
if(strcmp(r->
data.num,findmess)==0)
returnr;
r=r->
elseif(strcmp(nameornum,"
name"
)==0)/*按姓名查询*/
data.name,findmess)==0)
return0;
/*增加学生记录*/
voidAdd(Linkl)
Node*p,*r,*s;
/*实现添加操作的临时的结构体指针变量*/
charch,flag=0,num[10];
r=l;
s=l->
Disp(l);
/*先打印出已有的学生信息*/
while(r->
next!
/*将指针移至于链表最末尾,准备添加记录*/
while
(1)/*一次可输入多条记录,直至输入学号为0的记录结点添加操作*/
while
(1)/*输入学号,保证该学号没有被使用,若输入学号为0,则退出添加记录操作*/
请你输入学号(以'
0'
返回上一级菜单:
)"
scanf("
%s"
num);
flag=0;
if(strcmp(num,"
0"
)==0)/*输入为0,则退出添加操作,返回主界面*/
{return;
while(s)/*查询该学号是否已经存在,若存在则要求重新输入一个未被占用的学号*/
{
if(strcmp(s->
data.num,num)==0)
flag=1;
break;
}
s=s->
if(flag==1)/*提示用户是否重新输入*/
{getchar();
printf("
=====>
学号%s不存在,重新输入吗?
(y/n):
"
scanf("
%c"
&
ch);
if(ch=='
y'
||ch=='
Y'
)
continue;
else
return;
{break;
p=(Node*)malloc(sizeof(Node));
/*申请内存空间*/
p)
\n分配内存失败"
/*如没有申请到,打印提示信息*/
return;
/*返回主界面*/
strcpy(p->
data.num,num);
/*将字符串num拷贝到p->
data.num中*/
请你输入姓名:
p->
data.name);
请你输入语文成绩:
%d"
p->
data.cgrade);
请你输入数学成绩:
data.mgrade);
请你输入英语成绩:
data.egrade);
data.total=p->
data.egrade+p->
data.cgrade+p->
data.mgrade;
data.ave=p->
data.total/3;
/*信息输入已经完成*/
next=NULL;
r->
next=p;
r=p;
shoudsave=1;
voidQur(Linkl)/*按学号或姓名,查询学生记录*/
intsel;
/*1:
按学号查,2:
按姓名查,其他:
返回主界面(菜单)*/
charfindmess[20];
/*保存用户输入的查询内容*/
l->
next)/*若链表为空*/
没有资料可以查询!
1按学号查找\n=====>
2按姓名查找\n"
请选择[1,2]:
sel);
if(sel==1)/*学号*/
请你输入要查找的学号:
findmess);
p=Locate(l,findmess,"
/*在l中查找学号为searchinput值的节点,并返回节点的指针*/
if(p)/*若p!
=NULL*/
printheader();
printdata(p);
printf(END);
请按任意键返回"
getchar();
else
Nofind();
elseif(sel==2)/*姓名*/
请你输入要查找的姓名:
if(p)
Nofind();
Wrong();
/*删除学生记录:
先找到保存该学生记录的节点,然后删除该节点*/
voidDel(Linkl)/*删除*/
Node*p,*r;
next)
没有资料可以删除!
1按学号删除\n=====>
2按姓名删除\n"
if(sel==1)
请你输入要删除的学号:
=p)
next=p->
free(p);
该学生已经成功删除!
elseif(sel==2)
请你输入要删除的姓名:
/*修改学生记录。
先按输入的学号查询到该记录,然后提示用户修改学号之外的值,学号不能修改*/
voidModify(Linkl)
{system("
没有资料可以修改!
修改学生资料"
请你输入要修改的学生学号:
请你输入新学号(原来是%s):
data.num);
请你输入新姓名(原来是%s):
请你输入新的语文成绩(原来是%d分):
请你输入新的数学成绩(原来是%d分):
请你输入新的英语成绩(原来是%d分):
data.total/3;
资料修改成功!
/*插入记录:
按学号查询到要插入的节点的位置,然后在该学号之后插入一个新节点。
*/
voidInsert(Linkl)
Linkp,v,newinfo;
/*p指向插入位置,newinfo指新插入记录*/
charch,num[10],s[10];
/*s[]保存插入点位置之前的学号,num[]保存输入的新记录的学号*/
intflag=0;
v=l->
system("
Disp(l);
while
(1)
{printf("
请输入需要插入的新学号:
flag=0;
v=l->
while(v)/*查询该学号是否存在,flag=1表示该学号存在*/
if(strcmp(v->
data.num,s)==0){flag=1;
break;
v=v->
if(flag==1)
/*若学号存在,则进行插入之前的新记录的输入操作*/
学号%s不存在,重新试吗?
s);
{continue;
/*以下新记录的输入操作与Add()相同*/
请输入需要输入的新学生学号:
while(v)
对不起,新学号:
'
%s'
已经存在!
printdata(v);
newinfo=(Node*)malloc(sizeof(Node));
newinfo)
\n分配资源失败"
strcpy(newinfo->
请输入学生的姓名:
newinfo->
请输入学生的语文成绩[0-100]:
请输入学生的数学成绩[0-100]:
请输入学生的英语成绩[0-100]:
newinfo->
data.total=newinfo->
data.egrade+newinfo->
data.cgrade+newinfo->
data.ave=(float)(newinfo->
data.total/3);
/*在main()有对该全局变量的判断,若为1,则进行存盘操作*/
/*将指针赋值给p,因为l中的头节点的下一个节点才实际保存着学生的记录*/
while
(1)
if(strcmp(p->
data.num,s)==0)/*在链表中插入一个节点*/
newinfo->
p->
next=newinfo;
brea
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 体系结构 实验 报告