《C语言程序》课程设计报告书 学生信息管理.doc
吉林工程技术师范学院C语言程序课程设计报告书设计题目: 学生信息管理 专业: 计算机科学与技术 班级: 学生姓名: 学号: 30 指导教师: 2009年7月信息工程学院目 录摘 要- 2 -第一章 绪 论- 3 -第二章 问题定义- 4 -2.1 功能需求- 4 -2.2 性能需求- 5 -第三章 总体设计与详细设计- 6 -3.1 总体设计- 6 -3.2 详细设计- 8 -第四章 编码- 23 -第五章 调试与测试- 23 -第六章 总结与心得- 25 -附 录- 26 -附录一- 26 -附录二- 36 -摘 要 学生信息管理系统是典型的信息管理系统 (MIS),其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起数据一致性和完整性强、数据安全性好的库。而对于后者则要求应用程序功能完备,易使用等特点。 经过分析,我使用C语言开发工具,利用其提供的各种面向对象的开发工具,尤其是数据窗口这一能方便而简洁操纵数据库的智能化对象,首先在短时间内建立系统应用原型,然后,对初始原型系统进行需求迭代,不断修正和改进,直到形成用户满意的可行系统。关键字:信息管理系统(MIS) 数据库 完整性强 安全性好 功能完备 易使用 第一章 绪 论 随着学校的规模不断扩大,学生数量急剧增加,有关学生的各种信息量也成倍增长。面对庞大的信息量需要有学生管理系统来提高学生管理工作的效率。通过这样的系统可以做到信息的规范管理、科学统计和快速查询、修改、增加、删除等,从而减少管理方面的工作量。本系统主要用于学校学生信息管理,总体任务是实现学生信息关系的系统化、规范化和自动化,其主要任务是用计算机对学生各种信息进行日常管理,如查询、修改 、增加、删除,另外还考虑到学生选课,针对这些要求设计了学生信息管理系统本系统主要用于学校学生信息管理,总体任务是实现学生信息关系的系统化、规范化和自动化,其主要任务是用计算机对学生各种信息进行日常管理,如查询、修改 、增加、删除,针对这些要求设计了学生信息管理系统。本系统的主要功能主要有:有关学籍等信息的输入,包括输入学生基本信息、所在班级、成绩等。显示学生信息2.成绩排序3.添加学生信息4.删除学生信息5.修改学生信息6.查询学生信息第二章 问题定义2.1 功能需求:根据主界面显示内容进行选择并进一步执行相应操作。一、 当前学生信息:通过结构体struct student 来保存学生的姓名,班级,学号,C语言成绩等等相关信息。并通过input函数录入学生信息。 二、显示学生信息:输入一个班级,显示该班学生的全部信息。再根据C语言成绩分数段来显示学生信息。三、成绩排序:根据C语言成绩高低进行排序。四、添加学生信息:输入一个新学号、班级、姓名、成绩,从而添加全部信息。五、删除学生信息:输入一个学号,删除该生的全部信息。六、修改学生信息:输入姓名,进而修改该生信息。七、查询学生信息:输入姓名,进而查询该生全部信息。八、退出系统.2.2 性能需求:具有良好的可靠性和安全性。对于系统要求比较低。使用范围比较广。第三章 总体设计与详细设计3.1 总体设计:将此系统化分为如下模块(即如下函数):1、输入初始的学生信息:其中包括学生的学号、班级、姓名、C语言成绩等相关信息;可用函数input( )函数来实现此操作。 2、显示模块:用display( )函数来实现。输出此学生全部信息。3、排序模块:可用sort( )函数来实现。其中通过成绩的高低来比较的,并且以此来排序。4、添加模块:用insert( )函数来实现。5、删除模块:用del( )函数来实现。通过学号来进行删除。6、修改模块:用modify( )函数来实现。通过输入学生姓名来删除该生信息。7、查询模块:用find( )函数来实现。通过输入学生姓名来查询该生全部信息。8、退出系统:可用一个函数exit()来实现,首先将信息保存到文件中,释放动态创建的内存空间,再退出此程序。数据结构设计: 程序设计中用到的结构体类型: 存放学生信息的结构体: struct student int no; int classs; char name20; float score1; float sort; ; 3.2 详细设计:Int as;1显示主界面as=1as=2YESIF system("cls");input();break;主函数流程图:输入模块流程图:system("cls");ch!='n'&&ch!='N'Int i=0;printf("tttt1.录入学员信息n输入第%d个学员的信息n",i+1);temp=stuj;stuj-1.score1<stuj.score1j+j<=now_no-ij=1i+i<now_noi=1Struct student ;排序模块流程图:添加模块流程图:Char ch;ch!='n'&&ch!='N'printf("ntt输入新插入学员队信息n");显示模块流程图:printf("按任意键继续.n");ch!='n'&&ch!='N'!asInt i;printf("tttt%d班学员信息列表n",j);printf("是否按分数段查看学生成绩?(Y/N)");查询模块流程图:i+i<now_noi=0system("cls");!asInt i;printf("输入要查询的学生姓名:");printf("tt按任意键返回主菜单.");删除模块流程图:stui=stunow_no-1;i=now_nostui.no=inumsystem("cls");i+i<now_noi=0Int num,i,j;修改模块流程图:break;system("cls");system("cls");i+i<now_noi=0Int i;第四章 编码头文件包含:#include <time.h> #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <string.h> #define MAX 80nt now_no=0; 数据结构:struct student int no; int classs; char name20; float score1; float sort; ; struct student stuMAX,*p;原始数据录入模块:void input() int i=0; char ch; do printf("tttt1.录入学员信息n输入第%d个学员的信息n",i+1); printf("n输入学生编号:"); scanf("%d",&stui.no); printf("n输入学员班级(14):"); scanf("%d",&stui.classs); printf("n输入学员姓名:"); gets(stui.name); printf("n输入学员C语言成绩:"); scanf("%f",&stui.score1); printf("nn"); i+; now_no=i; printf("是否继续输入?(Y/N)"); ch=getch(); system("cls"); while(ch!='n'&&ch!='N'); system("cls"); 排序数据函数:void sort() struct student temp; int i,j; for(i=1;i<now_no;i+) for(j=1;j<=now_no-i;j+) if(stuj-1.score1<stuj.score1) temp=stuj; stuj=stuj-1; stuj-1=temp; 显示数据函数:void display() int i; int j; int mark; char as; char ch; printf("输入所查班级(14):"); scanf("%d",&j); do printf("tttt%d班学员信息列表n",j); printf(" ttt编号t姓名tC语言n"); for(i=0;i<now_no&&stui.name0;i+) if(stui.classs=j) printf(" ttt%dt%st%.2fn",stui.no,stui.name,stui.score1); printf("按任意键继续.n"); as=getch(); while(!as); printf("是否按分数段查看学生成绩?(Y/N)"); ch=getchar(); if(ch!='n'&&ch!='N') printf("tttt 90100分学员信息列表n"); printf(" ttt班级t编号t姓名tC语言值n"); for(i=0;i<now_no&&stui.name0;i+) mark=stui.score1/10;if(mark>=9) printf(" ttt%dt%dt%st%.2fn",stui.classs,stui.no,stui.name,stui.score1); printf("tttt 8090分学员信息列表n"); printf(" ttt班级t编号t姓名tC语言值n"); for(i=0;i<now_no&&stui.name0;i+) mark=stui.score1/10; if(mark<9&&mark>=8) printf(" ttt%dt%dt%st%.2fn",stui.classs,stui.no,stui.name,stui.score1); printf("tttt 7080分学员信息列表n",j); printf(" ttt班级t编号t姓名tC语言值n"); for(i=0;i<now_no&&stui.name0;i+) mark=stui.score1/10; if(mark<8&&mark>=7) printf(" ttt%dt%dt%st%.2fn",stui.classs,stui.no,stui.name,stui.score1); printf("tttt 6070分学员信息列表n",j); printf(" ttt班级t编号t姓名tC语言值n"); for(i=0;i<now_no&&stui.name0;i+) mark=stui.score1/10; if(mark<7&&mark>=6) printf(" ttt%dt%dt%st%.2fn",stui.classs,stui.no,stui.name,stui.score1); printf("tttt 不及格学员信息列表n",j); printf(" ttt班级t编号t姓名tC语言值n"); for(i=0;i<now_no&&stui.name0;i+) mark=stui.score1/10; if(mark<6) printf(" ttt%dt%dt%st%.2fn",stui.classs,stui.no,stui.name,stui.score1); printf("按任意键继续.n"); as=getch(); system("cls"); 插入数据函数:void insert() char ch; do printf("ntt输入新插入学员队信息n"); printf("n输入学生编号:"); scanf("%d",&stunow_no.no); printf("n输入学员班级:"); scanf("%d",&stunow_no.classs); printf("n输入学员姓名:"); gets(stunow_no.name); printf("n输入学员C语言成绩:"); scanf("%f",&stunow_no.score1); printf("nn"); now_no=now_no+1; sort(); printf("是否继续输入?(Y/N)"); ch=getch(); system("cls"); while(ch!='n'&&ch!='N'); 删除数据函数:void del() int inum,i,j; printf("输入要删除学员的编号:"); scanf("%d",&inum); for(i=0;i<now_no;i+) if(stui.no=inum) if(i=now_no)now_no-=1; else stui=stunow_no-1; now_no-=1; sort(); break; system("cls"); 查询函数:void find() int i; char str20,as; do printf("输入要查询的学生姓名:"); gets(str); for(i=0;i<now_no;i+) if(!strcmp(stui.name,str) printf("t编号t班级t姓名tC语言成绩n"); printf("t%dt%dt%st%.2fn",stui.no,stui.classs,stui.name,stui.score1); printf("tt按任意键返回主菜单."); as=getch(); while(!as); system("cls"); 修改数据函数:void modify() int i; char str20,as; printf("输入要修改的学生姓名:"); gets(str); for(i=0;i<now_no;i+) if(!strcmp(stui.name,str) system("cls"); printf("ntt输入新插入学员队信息n"); printf("n输入学生编号:"); scanf("%d",&stui.no); printf("n输入学员班级:"); scanf("%d",&stui.classs); printf("n输入学员C语言成绩:"); scanf("%f",&stui.score1); printf("nn"); sort(); break; system("cls"); 第五章 调试与测试第六章 总结与心得此次课程设计,使我仍感慨颇多,的确,从确定题目到完成整个编程,从理论到实践,在短短两周时间里,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,尤其对函数调用的正确使用不够熟悉,通过这次课程设计之后,一定把以前所学过的知识重新温故。而且在课程设计过程中,我也学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪,编程看起来似乎是一件很枯燥、乏味的事情,但是经历了这次大程序的编辑之后,发现其实里面还是充满乐趣的,一旦真的专研下去什么事情都可以放下,来认真研究。总之,编程是一项细致深入的工作,需要下工夫、动脑子、善于积累经验,这往往能反映出一个人的水平、经验和科学态度。课程设计结束了。无论我以后会不会涉及到C语言程序编译的研究,我想,我至少掌握了一种系统的研究方法,我们学习的目的就在于运用,而且我们运用这种研究方法的时候会很多。 附 录附录一:源代码:#include <time.h> #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <string.h> #define MAX 80 void input(); void sort(); void display(); void insert(); void del(); void find(); void modify(); int now_no=0; struct student int no; int classs; char name20; float score1; float sort; ; struct student stuMAX,*p; main() int as; start: printf("nttt * 欢迎使用学生成绩管理系统 *n"); do printf("ntttt1.录入学员信息ntttt2.显示学员信息ntttt3.成绩排序信息ntttt4.添加学员信息ntttt5.删除学员信息ntttt6.修改学员信息ntttt7.查询学员信息ntttt8.退出n"); printf("tttt选择功能选项:"); scanf("%d",&as); switch(as) case 1:system("cls");input();break; case 2:system("cls");display();break; case 3:system("cls");sort();break; case 4:system("cls");insert();break; case 5:system("cls");del();break; case 6:system("cls");modify();break; case 7:system("cls");find();break; case 8:system("exit");exit(0); default:system("cls");goto start; while(1); void input() int i=0; char ch; do printf("tttt1.录入学员信息n输入第%d个学员的信息n",i+1); printf("n输入学生编号:"); scanf("%d",&stui.no); printf("n输入学员班级(14):"); scanf("%d",&stui.classs); printf("n输入学员姓名:"); gets(stui.name); printf("n输入学员C语言成绩:"); scanf("%f",&stui.score1); printf("nn"); i+; now_no=i; printf("是否继续输入?(Y/N)"); ch=getch(); system("cls"); while(ch!='n'&&ch!='N'); system("cls"); void sort() struct student temp; int i,j; for(i=1;i<now_no;i+) for(j=1;j<=now_no-i;j+) if(stuj-1.score1<stuj.score1) temp=stuj; stuj=stuj-1; stuj-1=temp; void display() int i; int j; int mark; char as; char ch; printf("输入所查班级(14):"); scanf("%d",&j); do printf("tttt%d班学员信息列表n",j); printf(" ttt编号t姓名tC语言n"); for(i=0;i<now_no&&stui.name0;i+) if(stui.classs=j) printf(" ttt%dt%st%.2fn",stui.no,stui.name,stui.score1); printf("按任意键继续.n"); as=getch(); while(!as); printf("是否按分数段查看学生成绩?(Y/N)"); ch=getchar(); if(ch!='n'&&ch!='N') printf("tttt 90100分学员信息列表n"); printf(" ttt班级t编号t姓名tC语言值n"); for(i=0;i<now_no&&stui.name0;i+) mark=stui.score1/10; if(mark>=9) printf(" ttt%dt%dt%st%.2fn",stui.classs,stui.no,stui.name,stui.score1); printf("tttt 8090分学员信息列表n"); printf(" ttt班级t编号t姓名tC语言值n"); for(i=0;i<now_no&&stui.name0;i+) mark=stui.score1/10; if(mark<9&&mark>=8) printf(" ttt%dt%dt%st%.2fn",stui.classs,stui.no,stui.name,stui.score1); printf("tttt 7080分学员信息列表n",j); printf(" ttt班级t编号t姓名tC语言值n"); for(i=0;i<now_no&&stui.name0;i+) mark=stui.score1/10; if(mark<8&&mark>=7) printf(" ttt%dt%dt%st%.2fn",stui.classs,stui.no,stui.name,stui.score1); printf("tttt 6070分学员信息列表n",j); printf(" ttt班级t编号t姓名tC语言值n"); for(i=0;i<now_no&&stui.name0;i+) mark=stui.score1/10; if(mark<7&&mark>=6) printf(" ttt%dt%dt%st%.2fn",stui.classs,stui.no,stui.name,stui.score1); printf("tttt 不及格学员信息列表n",j); printf(" ttt班级t编号t姓名tC语言值n"); for(i=0;i<now_n