1、目 录数据结构课程设计报告书11. 课程设计(实训)计划32. 系统需求分析与功能设计43. 总体设计54. 程序模块设计65. 技术难点与分析236. 系统测试247. 心得体会291 课程设计(实训)计划利用C语言及数据结构方面的知识在visual c+ 平台中编写一个简单的管理系统,要求程序规范、层次清晰、可有效运行等。2系统需求分析与功能设计(1)具备对成绩的管理功能(添加、删除、排序)(2)具备按学号、姓名查询成绩的功能。备注:成绩记录的信息有学号、姓名。可以用能表示学生成绩的结构体数组存储数据。学生成绩管理系统退出添加修改删除查询处理输入排序3总体设计学生成绩管理系统管理功能查询功
2、能1:删除学生姓名、学号、成绩及学生列。2:对学生信息进行相应的修改(对象为:姓名、学号、成绩)。3:输入学生姓名、学号、成绩来添加学生列。用C语言编程比较同类数据(成绩)大小进行排序。4:通过输入学生的姓名、学号来查询对应的成绩。4程序模块设计管理模块查询模块管理模块删除排序添加修改查询模块按姓名按学号程序设计中用到的结构体类型:学生信息结构体类型:# include # include # include # include # include void menu(struct student *parr,int len);void sore(struct student *parr,in
3、t len);void output(struct student *parr,int *len);void input(struct student *parr,int len);void write(struct student *parr,int len);void read(struct student *parr,int len);void find(struct student *parr,int len);void logout(struct student *parr,int len);void exit(struct student *parr,int len);void m
4、odify(struct student *parr,int len);void insert(struct student*parr,int *len);struct student int number;/学号float score;/成绩char name10;/姓名;int main(void)struct student * parr;int len = 0;char ch = 0;printf(请输入需要存入的学生人数:);scanf(%d,&len);parr = (struct student *)malloc(sizeof(struct student) * len);men
5、u(parr, len);printf(按回车键继续n);while(1)system(cls);printf(nnnn);printf(tt|*|n);printf(tt|- 1.输入信息 -|n);printf(tt|- 2.查看全部 -|n);printf(tt|- 3.成绩排序 -|n);printf(tt|- 4.学号查找 -|n);printf(tt|- 5.修改信息 -|n);printf(tt|- 6.添加学生 -|n);printf(tt|- 7.保存信息 -|n);printf(tt|- 0.退出系统 -|n);printf(tt|*|n);printf(ttn);scan
6、f( %c,&ch);switch(ch)case 1 :input(parr,len);break;case 2 :output(parr,&len);break;case 3 :sore(parr,len);break;case 4 :find(parr,len);break;case 5 :modify(parr,len);break;case 6 :insert(parr,&len);break;case 7 :write(parr,len);break;case 0 :exit(parr,len);break;default :printf(nt输入错误!按回车键返回主菜单!);ge
7、tch();free(parr);return 0 ;/函数功能:实现按成绩排序void sore(struct student *parr,int len)int i,j;struct student t;for( i = 0; i len - 1; i+)for(j = 0; j parrj.score )t = parrj+1;parrj+1 = parrj;parrj = t;output(parr,&len);return;/函数功能:打印信息void output(struct student *parr,int *len)int i;for(i = 0;i *len; i+)pr
8、intf(姓名:%s 成绩:%.2f 学号:%dn,parri.name,parri.score,parri.number);printf(n);getchar();getchar();return;/函数功能:输入数据void input(struct student *parr,int len )int i;for( i = 0; i len; i+)printf(请输入第%d个学生信息:,i + 1);printf(姓名:);scanf(%s,parri.name);/name是数组名 本身就是地址printf(成绩: );scanf(%f,&parri.score);printf(学号
9、:);scanf(%d,&parri.number);printf(n);return;/*函数功能:将数据写入文件*/void write(struct student *parr,int len)int i;/控制循环FILE *fp = NULL;/定义文件指针fp = fopen(D:student.txt,w);/打开文件并使文件指针指向它,以写的方式if(fp = NULL)/如果文件没有打开,提示错误并退出printf(nt文件没有打开!程序结束!);getchar();/等待用户观察exit(0);/结束整个程序elsefor(i=0; ilen; i+)/将数据依次写入文件f
10、printf(fp, 姓名:%s 成绩:%.2f 学号:%dn,parri.name,parri.score,parri.number);printf(已将学生信息保存在了D盘根目录下的student.txt文件中。n);getch();fclose(fp);return;/*函数功能:读取文件数据*/void read(struct student *parr,int len)int i;FILE * fp = NULL;fp = fopen(D:student.txt,r);/以只读的方式打开文件if(fp = NULL)printf(数据读取失败!n);getchar();exit(0)
11、;elsefor(i=0; ilen; i+)fscanf(fp,%s,%d,%.2fn,parri.name,parri.number,parri.score);fclose(fp);return;/*函数功能:按学号找学生信息*/void find(struct student *parr,int len)int number= 0; int i;printf(请您输入需要查找的学号:);scanf(%d,&number);for( i=0; ilen; i+ )if(number = parri.number)printf(姓名:%s 成绩:%.2f 学号:%dn,parri.name,
12、parri.score,parri.number);getch();return;/*函数功能:注销学生信息*/void logout(struct student *parr,int len)char ch = 0;find(parr,len);printf(您确定要注销该学生吗?确定请按 Y,返回主菜单请按 N !n);scanf(%d,&ch);if(ch = Y) | (ch = y)return;void menu(struct student *parr,int len)printf(tt|=|n);printf(tt|-|n);printf(tt|- welcome! -|n);
13、printf(tt|- 学生成绩管理系统 -|n);printf(tt|-|n);printf(tt|=|n);getchar();getchar();system(cls);return;/*函数功能:结束整个程序*/void exit(struct student *parr,int len)/getchar();char ch = 0;doprintf(您确定要退出!(y/n):);scanf( %c,&ch);while(ch != Y) & (ch != y) & (ch != N) & (ch != n);if(ch = Y) | (ch = y)exit(0);return;/*
14、函数功能:修改学生信息*/void modify(struct student *parr,int len)int number = 0;char ch = 0;int i;printf(请您输入要修改的学生的学号:);scanf(%d,&number);for( i=0; ilen; i+ )if(number = parri.number)printf(姓名:%s 成绩:%.2f 学号:%dn,parri.name,parri.score,parri.number);printf(您确定要修改该学生信息(y/n));scanf( %c,&ch);if(ch = y)printf(请输入姓名
15、:);scanf(%s,parri.name);printf(请输入成绩:);scanf(%f,&parri.score);printf(请输入学号:);scanf(%d,&parri.number);printf(姓名:%s 成绩:%.2f 学号:%dn,parri.name,parri.score,parri.number);printf(修改成功!);getch();elseprintf(没有找到该学生);getch();break;return;/*函数功能:添加学生*/void insert(struct student *parr,int *len)int number = 0;/
16、添加学生的个数int i;printf(请输入您要添加几个学生信息:);scanf(%d,&number);parr = (struct student *)malloc(sizeof(struct student) * (*len+number);for(i=*len; i*len+number;i+)printf(请输入第%d个学生信息:,i + 1);printf(姓名:);scanf(%s,parri.name);printf(成绩: );scanf(%f,&parri.score); printf(学号:);scanf(%d,&parri.number);output(parr,&*len);5技术难点分析成绩排序的问题:为了降低难度要求用了结构体数组未彻底解决的问题:添加学生信息的模块,貌似添加的信息不能返回到查询块,添加无效!困惑6系统测试进入登入界面菜单项输入信息成绩排序按学号查找修改信息添加学生信息保存信息退出7心得体会其实我对C语言及数据结构都不怎么懂,这个学生成绩管理系统是在多方帮助下完成的,我对模块的调用不熟悉,不能把各个模块有机的结合起来,对结构体的掌握也还远远不够,还要多加学习。28