先通过判断数组长度i来判断学生信息数组是否为空,若i为0,即数据为空,则提示“请先创建基本信息\,若数据不为空,先定义一个courses类型的中间变量e,并将e的next指针域设置为空,之后输入课程代号,将输入的课程代号存入e.cNo中,在通过strcmp(_)去与已知的课程代号相比较,找到满足条件的课程代号后用fopen()打开对应的课程文件并将文件地址赋值给fp1,打开文件后用
fscanf()将文件中的数据赋值给e.sNo,e.degree,赋值完成后通过e.sNo找到对应的数组元素,并用isExitcNo()判断该门课程是否存在于该数组元素的队列中,若不存在则用EnQueue(p1[j],e)将该课程的信息存入数组元素的队列中,若已经存在该门课程的信息,则不将该课程信息存入数组元素的队列中,存入所有成绩完成后用fclose(fp1)关闭相应的文件; 6)统计成绩的算法实现
先通过判断数组长度i来判断学生信息数组是否为空,若i为0,即数据为空,则提示“请先创建基本信息\,若数据不为空,则通过建立一个for循环,在循环过程中先判断成绩信息是否为空,若成绩信息为空则提示先输入成绩,反之则用CalculateAve(p1[j])计算每个学生所有课程成绩的平均值,并将函数返回值赋值给p1[j].average; 7)查找学生信息的算法实现
先通过判断数组长度i来判断学生信息数组是否为空,若i为0,即数据为空,则提示“请先创建基本信息\,若数据不为空,通过输入一选择值来选择进行学号搜索或按姓名搜索,若该值为1,先输入一个学号存储于r中,再通过建立一个for循环来对数组进行遍历(设立一个flag值用于判断是否能找到该条学生信息,flag初值定为0),每次循环将数组元素中的学号与r进行比较,若学号相等,则对该学生的信息进行输出,并将flag赋值为1,若结束循环后flag值仍为0,即数组中无该条学生的信息,则提示“查无此人”
若选择值为2则先输入一个姓名存储于r中,再通过建立一个for循环来对数组进行遍历(设立一个flag值用于判断是否能找到该条学生信息,flag初值定为0),每次循环将数组元素中的姓名与r进行比较,若相等,则对该学生的信息进行输出,并将flag赋值为1,若结束循环后flag值仍为0,即数组中无该条学生的信息,则提示“查无此人” 8)排序的算法实现
先通过判断数组长度i来判断学生信息数组是否为空,若i为0,即数据为空,则提示“请先创建基本信息\,若数据不为空,则通过输入一选择值来选择进行学号排序或按平均成绩排序,若该值为1,则进行按学号排序,因此处的学号为字符型,故无法直接进行大小比较,因此需用sscanf()将字符型变量转化为int型变量再进行大小比较,此处以插入法排序对数组进行排序
若选择值为2,则通过比较数组中平均值的大小对数组进行排序,若成绩信息为空则提示先输入成绩,若不为空则以插入法排序对数组进行排序;
5 总结
1.在一周的时间里,不断地对程序及各模块进行修改、编译、调试、运行,其间遇到很 多问题,但通过自己的努力及询问同学的帮助都一一解决了。 2.程序是写出来的,不是想出来的。开始阶总是在想,总感觉很困难做不了,但是真正 投入其中之后才发觉其实只要用心,只要有克服一切的勇气和信心就可以把程序做好,错误总是越改越少的。
3.要用愉悦的心情去做,从编程的过程中体会乐趣,兴趣是最好的老师就是这么回事
4.要善于利用编程软件的调试功能调试自己的程序,通过程序的调试我发现并解决了许多问题
5.通过课程设计,自己通过系统分析、系统设计、编程调试,写实验报告等环节,进一 步掌握应用系统设计的方法和步骤,灵活运用并深刻理解典型数据结构在软件开发中的应用 。
6.通过实践,我也发现我的很多不足之处,首先是自己平时上机练习太少,知识的积压给编程带来了一定的麻烦。另外我对数据结构的一些标准库函数还不太了解,如开始进入系统后发现操作的界面很乱,如果能够及时的清屏那样就会变的很明了。查阅了相关的资料和问同学后我知道只要在程序中调用库函数system(\就可以了,知道了这个函数的基本用法;还有对数据结构中经常出现的错误也不了解,通过实践,使我独自处理错误的能力也有了很大的提高。 7.编写程序需要考虑到程序运行的各种状况,这样才能使程序使用的长久,不易出现bug。
附录
[单击此处添加程序源代码] 主程序:
#include
typedef int Status; using namespace std; #include\int main() {
student p1[100]; FILE *fp; int choice; int i=0; do{
cout<<\*********************\
cout<<\ 1--------------创建\ cout<<\ 2--------------显示\ cout<<\ 3--------------输入成绩\ cout<<\ 4--------------统计成绩\ cout<<\ 5--------------查找\ cout<<\ 6--------------排序\ cout<<\ 7--------------插入\ cout<<\ 8--------------删除\ cout<<\ 9--------------退出\
cout<<\*********************\ cin>>choice; system(\ switch(choice){ case 1:{
if(!(fp=fopen(\ cout<<\打开文件错误\ exit(0);} while(!feof(fp))
if((fscanf(fp,\nder,p1[i].brithday,p1[i].phoneNo,p1[i].tpartym,p1[i].addr))!=EOF){ if(isExistNo(p1,p1[i].No,i)) continue; else{
InitQueue(p1[i]); i++;
p1[i].average=0; }} if(i==0)
cout<<\文件为空,请检查文件\ else
cout<<\创建成功\ fclose(fp); break;}
case 2:
if(i==0)
cout<<\信息为空,请录入信息\ else
for(int j=0;j
if(i==0)
cout<<\请先创建基本信息\ else{
char c[10]; FILE *fp1; courses e; e.next=0; //student Q; //InitQueue(Q);
cout<<\请输入课程代号,若要返回上层请输入0\ do{
//cout<<\请输入课程代号,若要返回上层请输入0\
cin>>c;
if(strcmp(c,\rcmp(c,\
cout<<\课程代号出错,请重新输入\ continue; }
if(strcmp(c,\ strcpy(e.cNo,\
strcpy(e.cname,\原理基础\
if(!(fp1=fopen(\ cout<<\打开文件错误\ exit(0); } else{
while(!feof(fp1))
if((fscanf(fp1,\
for(int j=0;j
if((strcmp(e.sNo,p1[j].No)==0)&&(isExitcNo(p1[j],e.cNo)==0)) EnQueue(p1[j],e); } }
fclose(fp1); }
else if(strcmp(c,\ strcpy(e.cNo,\
strcpy(e.cname,\数据结构\
if(!(fp1=fopen(\ cout<<\打开文件错误\ exit(0);} else{
while(!feof(fp1))
if((fscanf(fp1,\
for(int j=0;j
if((strcmp(e.sNo,p1[j].No)==0)&&(isExitcNo(p1[j],e.cNo)==0)) EnQueue(p1[j],e); } }
fclose(fp1); }
else if(strcmp(c,\ strcpy(e.cNo,\
strcpy(e.cname,\数学建模\
if(!(fp1=fopen(\ cout<<\打开文件错误\ exit(0);} else{
while(!feof(fp1))
if((fscanf(fp1,\
for(int j=0;j
if((strcmp(e.sNo,p1[j].No)==0)&&(isExitcNo(p1[j],e.cNo)==0)) EnQueue(p1[j],e); }
学生档案管理系统c语言



