1、桂林航天工业学院课程设计总结报告报告题目 学生管理系统开课学期 2016-2017学年第 2学期班 级 软件工程 4班姓 名 有什么不懂的可以加我学 号 QQ:1416978277地 点 巡天楼 314机房报告日期 2017年 6月 17日成绩(五级记分制): 指导教师(签字):_目 录1.课程设计目的和要求 .12.课程设计的主要内容 .13.实践要求 .14.课程设计题目描述和要求 .15.系统实现 .35.1头文件 .35.2结构体 .35.3全局变量 .35.4函数声明 .36.源码 .46.1口令函数 .46.2主函数 .56.3输入函数 .66.4显示函数 .76.4.1多项删除
2、106.4.2全部删除 116.4.3修改 126.4.4插入 146.4.5查找 156.4.6排序 186.4.7另存为 236.5回收站 256.5.1多项恢复 276.5.2全部恢复 286.5.3多项彻底删除 296.5.4清空回收站 306.6重置系统 317.总结 328.附件 339.参考书目 33第 1 页1.课程设计目的和要求本课程设计是针对刚学完 C语言的计算机类专业学生的课程设计教学。C 语言是学生的第一门计算机高级语言课程,课程结束后,学生已经对 C语言程序设计有了较全面的了解,但接触的基本上是为了阐述相关概念或知识点而列举的示例,都是较小的程序,程序功能单一,因此缺
3、乏整体观点和编写一个具体实用的综合程序的思想。本课程设计的目的是要培养学生初步具有系统分析思想,并能利用开发工具开发一个简单实用的综合程序。为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力,提高学生适应实际,实践编程的能力。要求学生以 VC+6.0为开发工具,完成一个小型应用软件的设计和开发。进一步提高学生进行程序设计的能力。2.课程设计的主要内容(1)选题(2)进行系统分析(3)程序设计实现(4)系统测试(5)编写、上交课程设计报告3.实践要求(1)系统设计要实用。(2)对系统进行功能模块分析,主要功能模块正确实现。(3)
4、编程简练,可读性好,界面友好,功能全面。(4)课程设计报告格式要规范。4.课程设计题目描述和要求本课程设计选题为“学生成绩管理系统” 。系统主要功能是管理学生成绩信息,要求能实现学生成绩添加、删除、修改、查找、平均分、排序等功能。经过分析,确定本系统结构图如下图所示: 第 2 页学 生 管 理 系统输 入 学 生 数据 显 示显 示 数 据多 项 删 除全 部 删 除修 改插 入查 找学 号姓 名返 回排 序学 号姓 名C语 言英 语 成 绩高 数 成 绩平 均 分返 回另 存 为TXT文 件XLS文 件返 回返 回回 收 站回 收 站 数 据多 项 恢 复全 部 恢 复多 项 彻 底 删除清
5、 空 回 收 站返 回重 置 系 统 退 出口 令 验 证第 3 页5.系统实现5.1 头文件以下各个函数所需的头文件以及预定义#include#include#include#include#include#define N 128#define stlen sizeof(struct st)/结构体长度5.2 结构体 根据系统所管理数据信息的要求和特点,将学生成绩信息定义成以下结构体类型struct stint no; /序号int flag; /标记char num8; /学号char name8; /姓名float cpp; /C 语言成绩float eng; /英语成绩float m
6、ath; /数学成绩float ave; /平均分;5.3 全局变量为了简化函数的参数传递struct st sN;int tot=0;/结构体个数int flag0=0;/标记为 0 的个数5.4 函数声明方便各个函数相互调用void head();int all(int t);int change();int delall();int delpart();int display(int t);int find();第 4 页int findswitch(int t);int input();int insert();int part(int t);int recycle();int res
7、et();int save();int sort();int sortswitch(int x);int view();int viewplus();6.源码6.1 口令函数 为了验证是否为主人操作,正确后才可以进入系统,否则 3次错误退出系统void main()system(“mode con cols=94 lines=30“);/94 行 30 列(居中)SetConsoleTitle(“学生管理系统“); /标题system(“color F0“);/白底黑字printf(“欢迎使用学生管理系统n“);printf(“请输入口令!n“);char get10,pw=“123“;/密码
8、int count=3;while(count)gets(get);if(strcmp(get,pw)=0)printf(“口令正确!正在进入系统.n“);Sleep(500);head();elseif(count!=1)printf(“口令错误!请重新输入!n“);printf(“您还有%d 次机会!n“,-count);elseprintf(“口令错误!按任意键退出系统!n“);getch();exit(1);第 5 页6.2 主函数进入主界面void head()FILE *fp;if(fp=fopen(“data.dat“,“r“)=NULL)/如果没有文件fp=fopen(“dat
9、a.dat“,“wb+“); /创建一个文件fp=fopen(“data.dat“,“rb“);fseek(fp,0L,SEEK_END);/指向文件尾tot=ftell(fp)/stlen; /结构体个数fseek(fp,0L,SEEK_SET);/指向文件头fread(s,stlen,tot,fp);for(int i=0;itot)printf(“未找到!n“);return 0;if(no0return 0;if(no0i-)si=si-1;si.no+;printf(“请输入【学号】 【姓名】 【C 语言成绩】 【英语成绩】 【高数成绩】n“);printf(“(输入【0】取消并返回
10、主菜单)n“);i=no-1;scanf(“%s“,si.num);if(strlen(si.num)=1scanf(“%s%f%f%f“,si.ave=(si.cpp+si.eng+si.math)/3;printf(“tttt*n“);printf(“tttt* 确定【修改数据】吗? *n“);printf(“tttt* 修改后数据不可恢复 *n“);printf(“tttt* 【回车键】确认 *n“);printf(“tttt* 【其他键】取消 *n“);printf(“tttt*n“);if(getch()=13)FILE *fp;fp=fopen(“data.dat“,“wb+“);
11、fwrite(s,stlen,tot+1,fp);fclose(fp);tot+;flag0+;printf(“修改成功!n“);else 第 15 页printf(“您已取消修改,正在返回上一级。n“);return 0;6.4.5 查找查找某个数据int find()while(1)system(“cls“);printf(“tttt*n“);printf(“tttt* 请选择查找方式 *n“);printf(“tttt* 1.学号 *n“);printf(“tttt* 2.姓名 *n“);printf(“tttt* 0.返回主菜单 *n“);printf(“tttt*nn“);switc
12、h(getch()case 1:printf(“请输入要查找的 【学号】n“);findswitch(1);break;case 2:printf(“请输入要查找的 【姓名】n“);findswitch(2);break;case 0:return 0;break;default :printf(“输入有误!请重新输入。n“);Sleep(500);第 16 页6.4.5.1 学号按照学号查找int findswitch(int t)int i;char ch8;gets(ch);for(i=0;i0)k=j;if(x=2if(x=3if(x=4第 20 页if(x=5if(x=6if(k!=
13、i)t=s0i;s0i=s0k;s0k=t;printf(“序号t 学号t 姓名tC 语言t 英语t 高数t 平均分 n“);for(i=0;iflag0;i+)printf(“%dt%st%st%.2ft%.2ft%.2ft%.2fn“,s0i.no,s0i.num,s0i.name,s0i.cpp,s0i.eng,s0i.math,s0i.ave);system(“PAUSE“);return 0;6.4.6.2 姓名按照姓名排序第 21 页6.4.6.4C 语言成绩按照 C 语言排序第 22 页6.4.6.4 英语成绩按照英语成绩排序6.4.6.5 高数成绩按照高数成绩排序第 23 页6
14、.4.6.6 平均分按照平均分排序6.4.7 另存为另存为文件6.4.7.1TXT 文件导出 TXT 文件类型6.4.7.2XLS 文件导出 XLS 文件类型int save()/保存system(“cls“);while(1)system(“cls“);printf(“tttt*n“);printf(“tttt* 请选择导出方式: *n“);第 24 页printf(“tttt* 1.txt 文本文档 *n“);printf(“tttt* 2.xls 表格文件 *n“);printf(“tttt* 0.返回主菜单 *n“);printf(“tttt*n“);int ch=getch();if
15、(ch=0)return 0;if(ch=1|ch=2)FILE *fp;if(ch=1)fp=fopen(“data.txt“,“w“);if(ch=2)fp=fopen(“data.xls“,“w“);fprintf(fp,“序号t 学号t 姓名tC 语言t 英语t 高数t 平均分n“);for(int i=0;itot;i+)if(si.flag=0)fprintf(fp,“%dt%st%st%.2ft%.2ft%.2ft%.2fn“,si.no,si.num,si.name,si.cpp,si.eng,si.math,si.ave);fclose(fp);printf(“导出成功!n“
16、);if(!(ch=0|ch=1|ch=2)printf(“输入有误!请重新输入。 n“);Sleep(500);第 25 页6.5 回收站显示回收站数据,并进行操作int recycle()/回收站if(tot=flag0)printf(“无数据!n“);elsedisplay(1);printf(“tttt*n“);printf(“tttt* 以上为回收站数据: *n“);printf(“tttt* 请选择操作: *n“);printf(“tttt* 1.多项恢复 *n“);printf(“tttt* 2.全部恢复 *n“);printf(“tttt* 3.多项彻底删除 *n“);prin
17、tf(“tttt* 4.清空回收站 *n“);printf(“tttt* 【其他键】返回主菜单 *n“);printf(“tttt*n“);switch(getch()case 1:printf(“tttt*n“);printf(“tttt* 输入【序号】恢复 *n“);printf(“tttt* 多项之间加【空格】 *n“);printf(“tttt*n“);part(0);printf(“数据恢复成功!正在返回上一级。n“);break;case 2:printf(“tttt*n“);printf(“tttt* 确定【全部恢复】吗? *n“);printf(“tttt* 【回车键】恢复 *
18、n“);printf(“tttt* 【其他键】取消恢复 *n“);printf(“tttt*n“);if(getch()=13)all(0);printf(“全部恢复成功!正在返回上一级。n“);else 第 26 页printf(“您已取消全部恢复,正在返回上一级。n“);break;case 3:printf(“tttt*n“);printf(“tttt* 输入【序号】彻底删除 *n“);printf(“tttt* 多项之间加【空格】 *n“);printf(“tttt*n“);delpart();printf(“彻底删除成功!正在返回上一级。n“);break;case 4:printf
19、(“tttt*n“);printf(“tttt* 确定【清空回收站】吗?*n“);printf(“tttt* 【回车键】确认 *n“);printf(“tttt* 【其他键】取消 *n“);printf(“tttt*n“);if(getch()=13)delall();printf(“清空回收站成功!正在返回上一级。n“);else printf(“您已取消清空回收站,正在返回上一级。n“);break;Sleep(500);return 0;第 27 页6.5.1 多项恢复多项恢复数据int part(int t)/部分int xN,i=0,co=0;while(1)scanf(“%d“,c
20、o+;if(x0=0)return 0;if(xi+=0)break;printf(“操作的学生序号为:“);for(i=0;ico-1;i+)printf(“%d “,xi);printf(“n 确认操作请按【回车键】 ,否则按【其他键】n“);if(getch()=13)if(t=1)flag0-=(co-1);if(t=0)flag0+=(co-1);FILE *fp;fp=fopen(“data.dat“,“wb+“);for(int i=0;ico-1;i+)sxi-1.flag=t;/替换的值fwrite(s,stlen,tot,fp);第 28 页fclose(fp);else return 0;6.5.2 全部恢复全部恢复数据int all(int t)/全部if(getch()=13)if(t=1)flag0=0;if(t=0)flag0=tot;FILE *fp;fp=fopen(“data.dat“,“wb+“);for(int j=0;jtot;j+)sj.flag=t;/替换的值fwrite(s,stlen,tot,fp);fclose(fp);else return 0;