《C语言程序设计》课程设计学生成绩管理系统文档格式.docx
《《C语言程序设计》课程设计学生成绩管理系统文档格式.docx》由会员分享,可在线阅读,更多相关《《C语言程序设计》课程设计学生成绩管理系统文档格式.docx(20页珍藏版)》请在冰豆网上搜索。
7、将学生记录存在文件score中。
8、应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观!
(四)、设计要求
1、用C语言实现系统;
2、利用结构体数组实现学生成绩的数据结构设计;
3、系统具有增加,查询,插入,排序等基本功能;
4、系统的各个功能模块要求用函数的形式实现;
5、完成设计任务并书写课程设计报告。
6、将学生成绩信息存在文件中。
(五)、提交材料
1、课程设计报告
1)课程设计题目、内容、要求。
2)总体设计(包含几大功能模块)。
3)详细设计(各功能模块的具体实现算法——流程图)
4)数据结构设计描述,各模块(函数)的功能介绍,参数说明等。
5)调试分析(包含各模块的测试用例,及测试结果。
)
6)总结(课程设计完成了哪些功能,还有哪些地方需要改进,及通过一周的课程设计有何收获,调试程序的体会等)
二:
本程序共有八个功能与数据结构说明:
1.学生记录的输入(一次性输入,输入个数由用户决定,最大可容纳80记录,最大数可以在源程序中改)。
2.追加学生记录。
(追加后不能超过最在值80)。
3.修改记录。
4.删除记录。
5.浏览全部记录。
6.查找记录(按姓名查找)。
7.插入记录。
8.对记录进行排序(按平均成绩排序)。
9.退出。
10.数据结构是这样的:
学号只能由数字字符组成,最大可以11个字符;
姓名由字符组成,最大可以20个字符;
三门科目分数都是整型;
平均成绩是实型。
11.程序中定义了学生的容量为50个。
容量可以在源程序宏定义中改,本程序宏定义#defineN50
三:
下面是各个模块的流程图
(0)、主菜单函数;
这就是程序刚运行出现的。
主介面的流程图如下
清屏
显示一系列功能选项
输入n
判断n,(必须是0-9)
Y
N
W1=0
W1=1
While(w1==1)
对n多分支选择switch(n);
n=1
n=2
n=3
n=4
n=5
n=6
n=7
n=8
n=9
全新输入模块
追加模块
修改模块
删除模块
浏览模块
查找模块
插入模块
排序模块
退出程序
(一)、全新输入模块流程图
输入用户要输入学生记录的个数n
For(i=0;
i<
n;
i++)
调用输入函数input(i);
判断i!
=0
Y
保存
返回主菜单
(二)、追加模块流程图
调用加载函数n=load();
并计算可以记录个数n
输入用户要追加学生记录的个数m
K=m+n;
For(i=n;
k;
i++);
保存追加的记录
提示成功保存
(三)、修改模块流程图
定义structstudents;
inti,n,k,w0=1,w1,w2=0;
调用加载记录n=load();
n为记录个数
清屏clrscr();
显示所有记录,让用户看哪个要修改
输入要修改的学号s.num
是否找到此学生记录stu[i]
Y
N
k=i;
s=stu[i]
提示没有找到
While(k==-1);
显示找到的记录
调用修改函数w1=modify_data(i,n);
w1为保存控制值
if(w1==1)
询问用户是否继续修改另一个
1)是2)保存返回
w0=0;
if(w2==1)
N
输入w0
stu[k]=s;
w2=1;
if(w0!
=1&
&
w2==1)
保存save(n);
While(w0==1);
说明:
调用w1=modify_data(i,n)修改函数时,若返回值为1则表示用户在修改函数里面确认了这次修改,其中i表示第i个记录(要修改的),n表示总共有n个记录,n以便这修改函数在调用输入函数时用;
若返回值不为1则不保存这次修改,但保存这次之前的修改,这由w2来控制,w2=1则表示有过用户修改确认史。
(四)、删除模块流程图
inti,n,k,w0=1;
调用加载记录函数n=load();
K=-1;
显示找到的记录k
让用户选择进行操作
1).确定删除2).要删除另一个3).直接退出
输入c
判断C的值.三分支选择
c=1
c=2
c=3
stu[k].ave=0;
作删除标记,保存时则此记录不保存
W0=0;
询问用户是否继续
W0=1;
W0!
=1;
c!
=3)
保存;
若在让用户选择操作时选择了"3).直接退出",则不保存所有删除过的记录。
这里不同于修改模块。
(五)、浏览模块流程图
显示10个学生记录
按任意键
显示记录个数n
浏览时按10个记录分屏显示。
(六)、查找模块流程图
inti,n,k,w1=1,w2,w3,w4;
输入学生名字s.name
s.name==stu[i].name
K=I;
并显示此记录
if(k==-1)
询问是否继续
W1=1;
W1!
While(k==-1&
w1==1)
w3=0;
w4=0;
if(k!
=-1)
让用户选择1).查找另一个
2).修改3).删除4).返回主菜单
输入w2
对w2多分支选择
W2=1
W2=2
W2=3
W2=4
调用修改函数
w3=modify_data(k,n);
显示待删除的记录,并询问是否删除
W4=1;
if(w3==1||w4==1)
w2!
While(w2==1)
这模块是按姓名查找的,找到以后,增加了对它删除和修改功能。
而删除和修改模块都有浏览(记录信息不清楚的用户进行),或许删除和修改模块显得有点重复。
(七)、插入模块流程图
inti,j,n,c;
调用输入法单个记录的函数input(n);
显示刚才输入的记录stu[n]
让用户选择 1).确定2).否并重新输入
3).不保存返回
输入c,并对c多分支选择
C=1
C=2
c>
2
用起泡法排序,并保存.
While(c==2)
(八)、排序模块流程图
inti,j,k,n;
用选择法排序
提示保存成功
按任意键盘getch();
四:
除模块函数外还有自定义函数,下面这些自定义的函数作流程图
1.保存函数save(intn)
FILE*fp;
inti;
If(fp=fopen(“score.txt”,”wb”)==NULL)
提示不能打开.
ReturnNULL;
n:
if(stu[i].ave!
=0)
写到文件
关闭文件fclose(fp);
形参n是控制保存的个数.stu[k].ave=0;
作删除标记,保存时则不保存此记录
2.加载函数load()
If(fp=fopen(“score.txt”,”rb”)==NULL)
!
feof(fp):
fread(&
stu[i],sizeof(structstudent),1,fp);
return(i-1);
此函数可以用来加载所有记录,并且可以返回所有记录的个数。
3.学号输入函数no_input(inti,intn)
intj,k,w1;
输入学号stu[i].num
For(j=0;
stu[i].num[j]!
=’\0’;
j++)
学号是否为数字
提示学号不对;
break;
if(w1!
=1)
For(k=0;
k<
k++)
学号与其它相同)
提示此学生已存在
此函数对学号输入进行判断确保输入的学号唯一。
形参i表示第i个学生记录,形参n表示总共有n个学生记录。
4.对三科科目分数输入函数score_input(inti)
intj;
for(j=0;
j<
3;
输入分数
stu[i].score[j]
开参i表示第i个学生记录。
5.求平均值函数average(inti)
intj,sum;
For(sum=0,j=0;
sum+=stu[i].score[j]
stu[i].ave=sum/3.0
形参i表示第i个学生记录,
6.输入整一个记录函数input(inti)
调用学号输入函数no_input(i,i);
输入学生姓名stu[i].name
调用分数输入函数score_input(i);
调用求平均值函数average(i);
7.修改整条记录函数modify_data(inti,intn)