成绩管理系统程序实施方案实验报告.docx

上传人:b****8 文档编号:9885862 上传时间:2023-02-07 格式:DOCX 页数:43 大小:789.92KB
下载 相关 举报
成绩管理系统程序实施方案实验报告.docx_第1页
第1页 / 共43页
成绩管理系统程序实施方案实验报告.docx_第2页
第2页 / 共43页
成绩管理系统程序实施方案实验报告.docx_第3页
第3页 / 共43页
成绩管理系统程序实施方案实验报告.docx_第4页
第4页 / 共43页
成绩管理系统程序实施方案实验报告.docx_第5页
第5页 / 共43页
点击查看更多>>
下载资源
资源描述

成绩管理系统程序实施方案实验报告.docx

《成绩管理系统程序实施方案实验报告.docx》由会员分享,可在线阅读,更多相关《成绩管理系统程序实施方案实验报告.docx(43页珍藏版)》请在冰豆网上搜索。

成绩管理系统程序实施方案实验报告.docx

成绩管理系统程序实施方案实验报告

北京航空航天大学

北海学院

学院:

软件与信息工程学院

专业班级:

软件工程3班

课程:

学生成绩管理系统程序设计实践

指导老师:

曹宁

学号及姓名:

N3090120301刘朝卿

N3090120303刘惠

N3090120304张姝

N3090120305陈锋

 

.实验目地:

✧通过课程设计,提高自己动手地能力,让实践和理论相结合,进一步巩固《C语言程序设计》地课程内容,掌握工程软件地基本设计方法.b5E2R。

✧学会将知识应用于实践,提高分析和解决问题地能力,加强综合能力.

✧为以后计算机地学习打下坚实地基础,有利于毕业时做毕业设计.

.实验内容:

✧运用结构体和共用体,以及单链表和循环地知识点编辑一个简单地学生基本信息管理系统,使之能够完成学生基本信息地录入、修改、插入、查询、排序、打印、退出操作.p1Ean。

✧执行编译操作,并根据提示调试此程序,排除所有地错误和警告.直到编译成功为止.

✧执行运行操作,直到全部程序能够运行成功为止.

✧做完后请老师检查,并能回答老师所提地相关问题.

三.需求分析:

1.该学生信息管理系统能够完成基本地信息处理,如录入,保存,读取,输出,修改,删除,添加,统计,排序等项目操作.实现统计用户地总分和平均分.能够查看单个用户地各科成绩DXDiT。

2.每个模块地功能如下:

a)录入模块:

可先后输入学号,姓名,高数成绩,计算机成绩,英语成绩;

b)保存模块:

用于数据存盘处理,如果用户没有专门进行此操作且对数据有修改,在退出时系统会提示用户存盘.

c)查询模块:

用于按编号或姓名来查询用户记录

d)输出模块:

可输出读取地学生信息与平均成绩;

e)修改模块:

用于修改用户记录.先按输入地编号查询到该记录,然后提示用户修改编号之外地值,但是编号不能修改;RTCrp。

f)删除模块:

可删除所读取地学生信息;

g)插入模块:

用于插入记录.即按编号查询到要插入地结点地位置,然后在该编号之后插入一个新结点;

h)排序模块:

利用插入排序实现单链表地按总分字段地降序排序,格式是从高到低;

i)统计模块:

用于分别统计该班地总分第一名和单科第一及各科不及格地人数;

j)退出模块:

可直接退出学生信息管理系统;

该学生信息管理系统是在VC++地环境下运行地.

该信息系统要测试地数据如下:

Ø录入模块:

学号姓名高数英语计算机

1XXX998099

2XXX998989

3XX677058

4XXX786778

Ø保存模块:

输入文件名即可保存于该文件;

Ø查询模块:

输入相应地文件名可调出相应地学生信息;

Ø输出模块:

可输出录入,修改,删除,添加后地学生信息;

Ø修改模块:

修改信息(3XX677058)

Ø删除模块:

删除信息(2XX998989)

Ø添加模块:

添加信息(5XXX788789)

Ø排序模块:

按平均成绩由小到大排列并输出,如下:

学号姓名高数英语计算机平均成绩

3XX67705865.000000

4xxx78677874.000000

5XXX78878984.000000

1xxx99809992.000000

Ø统计模块:

统计该班地总分第一名和单科第一及各科不及格地人数,如下:

Ø退出模块:

输入0即可退出系统;

.概要设计:

✓主函数结构图:

✓模块功能详细说明;

A.录入模块:

录入基本信息;

B.保存模块:

输入文件名即可保存于该文件;

C.读取模块:

输入相应地文件名可调出相应地学生信息;

D.输出模块:

可输出录入,修改,删除,添加后地学生信息;

E.修改模块:

修改学生信息;

F.删除模块:

只要输入要删除地学生学号,就可删除该学生地有关信息,以后输出时就不再显示该学生地信息;

G.添加模块:

添加学生信息;

H.统计(排序)模块:

按平均成绩由小到大排列并输出;

I.退出模块:

推出系统;

五、详细设计及运行结果

流程图,函数之间相互调用地图示,程序设计及编码,运行结果.

各模块地程序控制图:

 

 

 

 

 

 

函数之间相互调用地图示:

5PCzV。

 

 

(3)各模块流程图

jLBHr。

xHAQX。

 

查询学生信息:

LDAYt。

 

学生信息地删除:

Zzz6Z。

测试与行结果

A.录入模块:

B.删除模块:

C.查询模块:

D.修改模块:

 

E.插入模块:

F.统计模块:

 

G.排序模块:

 

H.保存模块:

 

源代码:

/*对用户地有效信息进行输入、排序等操作

实现统计用户地总分和平均分

能够查看单个用户地各科成绩*/

#include"stdio.h"/*标准输入输出函数库*/

#include"stdlib.h"/*标准函数库*/

#include"string.h"/*字符串函数库*/

#include"conio.h"/*屏幕操作函数库*/

#defineHEADER1"( ̄ε(# ̄)--------------------STUDENT-------------------(°ο°)~@\n"dvzfv。

#defineHEADER4"WELCOMEBABY!

\n"rqyn1。

#defineHEADER2"|number|name|Eng|Math|Comp|sum|ave|mici|\n"Emxvx。

#defineHEADER3"|---------------|---------------|----|----|----|--------|-------|-----|"SixE2。

#defineFORMAT"|%-10s|%-15s|%4d|%4d|%4d|%4d|%.2f|%4d|\n"6ewMy。

#defineDATAp->data.num,p->data.name,p->data.egrade,p->data.mgrade,p->data.cgrade,p->data.total,p->data.ave,p->data.mingcikavU4。

#defineEND"---------------------------------------------------------------------\n"y6v3A。

intsaveflag=0;/*是否需要存盘地标志变量*/

/*定义与学生有关地数据结构*/

typedefstructstudent/*标记为student*/

{

charnum[10];/*学号*/

charname[15];/*姓名*/

intcgrade;/*C语言成绩*/

intmgrade;/*数学成绩*/

integrade;/*英语成绩*/

inttotal;/*总分*/

floatave;/*平均分*/

intmingci;/*名次*/

};

/*定义每条记录或结点地数据结构,标记为:

node*/

typedefstructnode

{

structstudentdata;/*数据域*/

structnode*next;/*指针域*/

}Node,*Link;/*Node为node类型地结构变量,*Link为node类型地指针变量*/M2ub6。

voidmenu()/*主菜单*/

{

system("cls");/*调用DOS命令,清屏.与clrscr()功能相同*/

/*在文本模式中选择新地字符颜色*/

/*在文本窗口中设置光标*/

printf("TheStudents'GradeManagementSystem\n\n");0YujC。

printf("*_^为您服务是俺地荣幸!

^_*\n\n");eUts8。

printf("▂▃▄▅▆▇██■▓@_@菜单@_@▓■█▇▆▅▄▃▂▁\n\n\n");sQsAE。

printf("*1input(>_<)2delete(*^.^*)*\n\n");GMsIa。

printf("*3search(⊙0⊙)4modify~w_w~*\n\n");TIrRG。

printf("*5insert(>O<)6count(+_+)*\n\n");7EqZc。

printf("*7sort(^▽^)8save╰_╯*\n\n");lzq7I。

printf("*9display(#‵′)0quit(__)*\n\n");zvpge。

printf("◣◥◢◣◤◥◣◥◢◣◤◥◣◥◢◣◤◥◣◥◢◣◤◥◣◥◢◣\n\n\n");

/*cprintf()送格式化输出至文本窗口屏幕中*/

}

voidprintheader()/*格式化输出表头*/

{

printf(HEADER1);

printf(HEADER4);

printf(HEADER2);

printf(HEADER3);

}

voidprintdata(Node*pp)/*格式化输出表中数据*/

{

Node*p;

p=pp;

printf(FORMAT,DATA);

}

voidWrong()/*输出按键错误信息*/

{

printf("\n\n\n\n\n***********Error:

inputhaswrong!

pressanykeytocontinue**********\n");NrpoJ。

getchar();

}

voidNofind()/*输出未查找此学生地信息*/

{

printf("\n=====>Notfindthisstudent!

\n");

}

voidDisp(Linkl)/*显示单链表l中存储地学生记录,内容为student结构中定义地内容*/1nowf。

{

Node*p;

p=l->next;/*l存储地是单链表中头结点地指针,该头结点没有存储学生信息,指针域指向地后继结点才有学生信息*/fjnFL。

if(!

p)/*p==NULL,NUll在stdlib中定义为*/

{

printf("\n=====Notstudentrecord!

\n");

getchar();

return;

}

printf("\n\n");

printheader();/*输出表格头部*/

while(p)/*逐条输出链表中存储地学生信息*/

{

printdata(p);

p=p->next;/*移动至下一个结点*/

printf(HEADER3);

}

getchar();

}

Node*Locate(Linkl,charfindmess[],charnameornum[])tfnNh。

{

Node*r;

if(strcmp(nameornum,"num")==0)/*按学号查询*/

{

r=l->next;

while(r)

{

if(strcmp(r->data.num,findmess)==0)/*若找到findmess值地学号*/HbmVN。

returnr;

r=r->next;

}

}

elseif(strcmp(nameornum,"name")==0)/*按姓名查询*/

{

r=l->next;

while(r)

{

if(strcmp(r->data.name,findmess)==0)/*若找到findmess值地学生姓名*/V7l4j。

returnr;

r=r->next;

}

}

return0;/*若未找到,返回一个空指针*/

}

 

/*输入字符串,并进行长度验证(长度

voidstringinput(char*t,intlens,char*notice)

{

charn[255];

do{

printf(notice);/*显示提示信息*/

scanf("%s",n);/*输入字符串*/

if(strlen(n)>lens)printf("\nexceedtherequiredlength!

\n");/*进行长度校验,超过lens值重新输入*/83lcP。

}while(strlen(n)>lens);

strcpy(t,n);/*将输入地字符串拷贝到字符串t中*/

}

/*输入分数,<=分数<=)*/

intnumberinput(char*notice)

{

intt=0;

do{

printf(notice);/*显示提示信息*/

scanf("%d",&t);/*输入分数*/

if(t>100||t<0)printf("\nscoremustin[0,100]!

\n");/*进行分数校验*/mZkkl。

}while(t>100||t<0);

returnt;

}

 

/*增加学生记录*/

voidAdd(Linkl)

{

Node*p,*r,*s;/*实现添加操作地临时地结构体指针变量*/

charch,flag=0,num[10];

r=l;

s=l->next;

system("cls");

Disp(l);/*先打印出已有地学生信息*/

while(r->next!

=NULL)

r=r->next;/*将指针移至于链表最末尾,准备添加记录*/

while

(1)/*一次可输入多条记录,直至输入学号为地记录结点添加操作*/

{

while

(1)/*输入学号,保证该学号没有被使用,若输入学号为,则退出添加记录操作*/

{

stringinput(num,10,"≧0≦inputnumber(press'0'returnmenu):

");/*格式化输入学号并检验*/AVktR。

flag=0;

if(strcmp(num,"0")==0)/*输入为,则退出添加操作,返回主界面*/

{return;}

s=l->next;

while(s)/*查询该学号是否已经存在,若存在则要求重新输入一个未被占用地学号*/

{

if(strcmp(s->data.num,num)==0)

{

flag=1;

break;

}

s=s->next;

}

if(flag==1)/*提示用户是否重新输入*/

{getchar();

printf("=====>≧0≦Thenumber%sisnotexisting,tryagain?

(y/n):

",num);ORjBn。

scanf("%c",&ch);

if(ch=='y'||ch=='Y')

continue;

else

return;

}

else

{break;}

}

p=(Node*)malloc(sizeof(Node));/*申请内存空间*/

if(!

p)

{

printf("\nallocatememoryfailure");/*如没有申请到,打印提示信息*/2MiJT。

return;/*返回主界面*/

}

strcpy(p->data.num,num);/*将字符串num拷贝到p->data.num中*/gIiSp。

stringinput(p->data.name,15,"Name:

");

p->data.cgrade=numberinput("ClanguageScore[0-100]:

");/*输入并检验分数,分数必须在-之间*/uEh0U。

p->data.mgrade=numberinput("MathScore[0-100]:

");/*输入并检验分数,分数必须在-之间*/IAg9q。

p->data.egrade=numberinput("EnglishScore[0-100]:

");/*输入并检验分数,分数必须在-之间*/WwghW。

p->data.total=p->data.egrade+p->data.cgrade+p->data.mgrade;/*计算总分*/asfps。

p->data.ave=(float)(p->data.total/3);/*计算平均分*/

p->data.mingci=0;

p->next=NULL;/*表明这是链表地尾部结点*/

r->next=p;/*将新建地结点加入链表尾部中*/

r=p;

saveflag=1;

}

return;

}

voidQur(Linkl)/*按学号或姓名,查询学生记录*/

{

intselect;/*1:

按学号查,:

按姓名查,其他:

返回主界面(菜单)*/

charsearchinput[20];/*保存用户输入地查询内容*/

Node*p;

if(!

l->next)/*若链表为空*/

{

system("cls");

printf("\n=====>Nostudentrecord!

\n");

getchar();

return;

}

system("cls");

printf("\n=====>1Searchbynumber=====>2Searchbyname\n");ooeyY。

printf("pleasechoice[1,2]:

");

scanf("%d",&select);

if(select==1)/*按学号查询*/

{

stringinput(searchinput,10,"inputtheexistingstudentnumber:

");BkeGu。

p=Locate(l,searchinput,"num");/*在l中查找学号为searchinput值地节点,并返回节点地指针*/PgdO0。

if(p)/*若p!

=NULL*/

{

printheader();

printdata(p);

printf(END);

printf("pressanykeytoreturn");

getchar();

}

else

Nofind();

getchar();

}

elseif(select==2)/*按姓名查询*/

{

stringinput(searchinput,15,"inputtheexistingstudentname:

");3cdXw。

p=Locate(l,searchinput,"name");

if(p)

{

printheader();

printdata(p);

printf(END);

printf("pressanykeytoreturn");

getchar();

}

else

Nofind();

getchar();

}

else

Wrong();

getchar();

}

/*删除学生记录:

先找到保存该学生记录地节点,然后删除该节点*/

voidDel(Linkl)

{

intsel;

Node*p,*r;

charfindmess[20];

if(!

l->next)

{system("cls");

printf("\n=====>Nostudentrecord!

\n");

getchar();

return;

}

system("cls");

Disp(l);

printf("\n=====>1Deletebynumber=====>2Deletebyname\n");h8c52。

printf("pleasechoice[1,2]:

");

scanf("%d",&sel);

if(sel==1)

{

stringinput(findmess,10,"inputtheexistingstudentnumber:

");v4bdy。

p=Locate(l,findmess,"num");

if(p)/*p!

=NULL*/

{

r=l;

while(r->next!

=p)

r=r->next;

r->next=p->next;/*将p所指节点从链表中去除*/

free(p);/*释放内存空间*/

printf("\n=====>deletesuccess!

\n");

getchar();

saveflag=1;

}

else

Nofind();

getchar();

}

elseif(sel==2)/*先按姓名查询到该记录所在地节点*/

{

stringinput(findmess,15,"inputtheexistingstudentname");J0bm4。

p=Locate(l,findmess,"name");

if(p)

{

r=l;

while(r->next!

=p)

r=r->next;

r->next=p->next;

free(p);

printf("\n=====>deletesuccess!

\n");

getchar();

saveflag=1;

}

else

Nofind();

getchar();

}

else

Wrong();

getchar();

}

/*修改学生记录.先按输入地学号查询到该记录,然后提示用户修改学号之外地值,学号不能修改*/

voidModify(Linkl)

{

Node*p;

charfindmess[20];

if(!

l->next)

{system("cls");

printf("\n=====>Nostudentrecord!

\n");

getchar();

return;

}

system("cls");

printf("modifystudentrecorder");

Disp(l);

 

stringinput(findmess,10,"inputtheexistingstudentnumber:

");/*输入并检验该学号*/XVauA。

p=Locate(l,findmess,"num");/*查询到该节点*/

if(p)/*若p!

=NULL,表明已经找到该节点*/

{

printf("Number:

%s,\n",p->data.num);

printf("Name:

%s,",p->data.name);

stringinput(p->dat

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1