c语言课程设计3学生成绩管理系统Word文件下载.docx
《c语言课程设计3学生成绩管理系统Word文件下载.docx》由会员分享,可在线阅读,更多相关《c语言课程设计3学生成绩管理系统Word文件下载.docx(21页珍藏版)》请在冰豆网上搜索。
读取文件
●可以按照默认名字或指定名字将记录文件读入内存;
●读取成功返回0,否则返回-1;
●可以将指定或默认文件追加到现有记录并更新记录的尾部;
●可以将文件连续追加到现有记录并更新记录的名词;
删除记录
●可以按“学好”、“姓名”、“名词”方式删除记录;
●给出将删除记录的信息,经确认后在删除;
●如果已经是空表,删除时给出提示信息并返回菜单;
●如果没有要删除的信息,输出没有找到的信息;
●应该更新其他记录的名词;
●删除操作权限于内存,只有执行存记录时,才能覆盖原记录;
修改记录
●可以按“学号”、“姓名”、“名次”方式修改记录内容;
●给出将修改记录的信息,经确认后进行修改;
●如果已经是空表,应给出提示信息并返回主菜单;
●如果没有找到需要要改的信息,输出提示信息;
●应该同时更新其他记录的名词;
●修改操作权限于内存,只有进行存储操作时,才能覆盖原记录;
查询记录
●能给出查询记录的信息;
●如果查询的信息不存在,输出提示信息;
对记录进行排序
●可以按学好进行升序或降序排序;
●可以按名称进行升序和降序排序;
●可以按名词进行升序或降序排序;
●如果属于选择错误,可以立即退出排序;
头文件
●使用条件编译定义头文件;
●函数原型声明;
●数据结构及包含文件;
测试程序
●应列出测试大纲对程序进行测试;
●应保证测试用例测试到程序的各种边缘情况;
●以上是基本要求,希望通过对本章设计的理解,重新考虑如何进行设计。
2.总体设计
最初的整体规划只是说明它们的可行性,不要求制定函数的具体实现,甚至不需要考虑函数原型。
完成整体规划后,可以按照流程描述各个模块之间的接口功能。
本课程设计对模块设计的要求如下:
●要求使用对文件方式实现设计;
●要求在各个文件内实现结构化设计;
●每个模块作为一个单独的C文件,每个文件内的函数如表12—1所示,表中给出了各个函数的功能说明;
●宏和数据结构等放在头文件中,并使用条件编译。
本设计由5个C文件(17个函数)和一个头文件组成,每个C文件都代表着某种特定的功能,它们的关系如表12-1所示。
本章的设计将更加注意模块化,以便展示C语言的编程风格。
程序包含文件的存、取过程。
它的功能就是按输入顺序建立记录。
如果原来没有记录文件,可以重新建立一个文件;
如果已经有记录,可以先把文件内容读入,然后把新记录追加到原来记录的尾部;
也可以单独建立新文件,以后再使用读取文件的方法拼装。
由上述功能缝隙可以看到它的全貌。
因为它有并列选择,所以可以用选择菜单方面地实现。
这个菜单具有10个选择项,用switch语句可以实现这些选择。
可以用简洁的伪码对它们进行描述,因为并不复杂,所以不再赘述。
源文件
函数名或其他成分
功能
student.c
add_disp.c
main
总控函数
menu_select
菜单选择
handle_menu
菜单处理
newRecords
新建学生信息记录
quit
结束运行
que_remv_modi.c
showTable
打印表头
getIndex
按升序排序的位置
addRecord
在表尾追加信息
display
显示信息
save_load
removeRecord
删除指定的记录
findRecord
查找指定的记录
queryInfo
查询指定学生的信息
copyRecord
复制记录
modifyRecord
修改指定学生的信息
sort.c
sortInfo
排序
student.h
常数
提供常数
结构声明
学生成绩结构
库函数及函数原型声明
引用库函数及函数
3.函数设计
为一些函数设计两个返回值以区分其执行结果是否正确。
每个学生信息资料用一个StuInfo结构来保存,用StuInfo数组全局变脸records来保存一批学生的信息资料。
其中的宏定义表示数组初始大小。
测试示例
设计者制定详细的测试计划,然后根据测试计划设计测试用例,对程序进行彻底测试,程序设置的课程为
char*subject[]={”语文”、”数学”、”英语”、”物理”、”化学”};
可以修改课程名称和树木。
这里减少科目以加快测试,即通过语句
#defineNUM_SUMJECT2
选取两门课程。
由于跟踪测试的结果过多,这里只举几个例子,简介针对程序功能进行测试的方法
菜单项及空表和空文件测试
在没有产生文件之前,对需要用到的菜单进行选择,看它们是否满足要求。
*************************
*这是一个*
*学生成绩管理程序*
*可以对学生成绩进行管理*
*欢迎使用管理程序*
1.增加学生信息
2.修改学生信息
3.显示学生信息
4.查询学生信息
5.删除学生信息
6.对学生信息进行排序
7.保存学生信息至记录文件
2.源程序:
#include<
stdio.h>
string.h>
/*定义学生结构体*/
structStudent
{
charID[20];
charName[20];
floatMark1;
floatMark2;
floatMark3;
floatAverage;
};
/*声明学生数组及学生数量*/
structStudentstudents[1000];
intnum;
/*求平均值*/
floatAvg(structStudentstu)
return(stu.Mark1+stu.Mark2+stu.Mark3)/3;
}
/*通过学号返回数组下标*/
intStudent_SearchByIndex(charid[])
inti;
for(i=0;
i<
num;
i++)
{
if(strcmp(students[i].ID,id)==0)
returni;
}
return-1;
/*通过姓名返回数组下标*/
intStudent_SearchByName(charname[])
if(strcmp(students[i].Name,name)==0)
/*显示单条学生记录*/
voidStudent_DisplaySingle(intindex)
printf("
%10s%10s%8s%8s%8s%10s\n"
"
学号"
姓名"
语文"
数学"
英语"
平均成绩"
);
-------------------------------------------------------------\n"
%10s%10s%8.2f%8.2f%8.2f%10.2f\n"
students[index].ID,students[index].Name,
students[index].Mark1,students[index].Mark2,students[index].Mark3,students[index].Average);
/*插入学生信息*/
voidStudent_Insert()
while
(1)
请输入学号:
"
scanf("
%s"
&
students[num].ID);
getchar();
请输入姓名:
students[num].Name);
语文:
%f"
students[num].Mark1);
数学:
students[num].Mark2);
英语:
students[num].Mark3);
students[num].Average=Avg(students[num]);
num++;
是否继续?
(y/n)"
if(getchar()=='
n'
)
break;
/*修改学生信息*/
voidStudent_Modify()
floatmark1,mark2,mark3;
charid[20];
intindex;
请输入要修改的学生的学号:
id);
index=Student_SearchByIndex(id);
if(index==-1)
学生不存在!
\n"
else
你要修改的学生信息为:
Student_DisplaySingle(index);
--请输入新值--\n"
students[index].ID);
students[index].Name);
students[index].Mark1);
students[index].Mark2);
getchar