1、C 语言程序设计课程设计报告题目: 学生信息管理系统 专业: 电气工程及其自动化 班级: 电气 002 班 学号: 10010170 姓名: 闫亚运 完成日期: 2011 年 6 月 15 日第一章 选题意义1.1 意义现代科学多元化已经开始了。随着科学技术的快速发展和人们生活水平的提高,信息技术越来越深入人心。计算机在人类生活和学习中充当着很重要的作用。随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。管理信息系统是一个不断发展的新型学科,任何一个单位要生存要发展,要高效率地把内部活动有机地组织起来,就必须建立与自身特点相适应的管理信息系统。而建立一个方便快捷
2、的管理系统是每个管理者所希望的。我设计的是一个关于学生信息管理的数据库系统,通过这个系统管理员可以简捷、方便的对学生信息进行增加、浏览、删除等功能,而用户也可以通过这个系统对学生信息进行查询等功能,从而使学校和个人更方便的查找,浏览学生的信息,并通过成绩排序对学生的情况作进一步的了解,对学生的管理更加便捷。1.2 目标通过该题目的设计过程,可以培养学生结构化程序设计的思想,加深对高级语言基本语言要素和控制结构的理解,针对 c 语言中的重点和难点内容进行训练,独立完成有一定工作量的程序设计任务,同时强调好的程序设计风格。得到软件工程的综合训练,提高解决实际问题的能力。第二章 系统功能模块设计2.
3、1 功能模块设计学生管理系统: 1、录入学生信息 2、删除学生信息3、浏览学生信息 4、查找学生信息 4、1 按学号查找4、2 按姓名查找4、3 按成绩查找5、根据总成绩排序 6、保存学生信息 7、将文件导出8、退出信息系统 2.2 函数的设计与描述(1)数据结构设计本程序中,对于学生信息的记录用了结构数组的形式,对于主要数据结构的应用如下:结构数组:Typedef struct student /*结构体*/char xuehao20; /* 学号*/char xingming20; /* 姓名*/int scoreM; /* 分数*/int sum; /* 总成绩*/stuN;(2)模块接
4、口设计本程序执行的入口是 main 函数,然后用 switch 语句实现对各个函数的调用。被调用的函数都是没有形参的,函数直接实现所需要的功能。最后,再从 main 函数中结束整个程序的运行。 其中涉及到被调用的函数有:Void menu 显示帮助信息;Void dengji 登记学生信息 ;Void shanchu 删除学生信息 ;Void liulan 浏览学生信息 ;Void chazhao 查找学生信息;Void paixu 学生信息排序;Void cunchu 存储学生信息;Void daochu 导出学生信息;第三章 程序流程图选择 1选择 3选择 2选择 4选择 5选择 7选择
5、6选择 8输出界面选择操作退出系统结果开始输入学生信息删除学生信息浏览学生信息查找学生信息学生成绩排序导出学生信息存储学生信息是是是是是是是是 否否否否否否否否第四章 源代码摘录#include #include #include #include #define M 3#define N 100typedef struct studentchar xuehao20;char xingming20;int scoreM;int sum;STUDENT;STUDENT studentN;int renshu=0;void menu();void fhzjm()/返回主界面函数char biaoz
6、hi20;printf(“n“);printf(“还需要操作么?如果需要操作请输入:yes,否则请输入:non“);scanf(“%s“,biaozhi);if(strcmp(biaozhi,“yes“)=0)menu();else if(strcmp(biaozhi,“no“)=0)exit(0);else printf(“请输入正确的字符,谢谢!n“);fhzjm();void DengJi()/登记学生信息函数int rs;int i,j,k=1;system(“CLS“);printf(“请输入需要输入几个学生信息:“);scanf(“%d“,for(i=renshu;isumsum)
7、temp=*(p2+i);*(p2+i)=*(p2+j);*(p2+j)=temp;printf(“按照总成绩排序之后的信息为:n“);printf(“-学号- 姓名 -总成绩-n“);for( i=0;ixuehao,(*(p2+i)-xingming,(*(p2+i)-sum);fhzjm();void CunChu()int i;FILE *rs;if(rs=fopen(“card.dat“,“wb“)=NULL)printf(“not open“);exit(0);for(i=0;irenshu;i+)fwrite(if(ferror(rs)fclose(rs);perror(“写文件
8、失败!n“);return;printf(“存储文件成功!n“);fclose(rs); fhzjm();void DaoChu()struct student t;int i=0;FILE* fp = fopen(“card.dat“, “rb“);renshu=0;if(NULL=fp)perror(“读取文件打开失败!n“);return;memset(student,0x0,sizeof(student);while(1)fread(if(ferror(fp)fclose(fp);perror(“读文件过程失败!n“);return;if(feof(fp)break;studenti=
9、t;i+;fclose(fp);renshu=i;printf(“导出文件成功!n“);fhzjm();void menu()int n;system(“CLS“);printf(“ 学生信息管理系统n“);printf(“ 作者:闫亚运n“);printf(“-MENU-n“);printf(“ 1.登记学生信息n“);printf(“ 2.删除学生信息n“);printf(“ 3.浏览所有已经登记的学生n“);printf(“ 4.查找n“);printf(“ 4.1.按学号查找n“);printf(“ 4.2 按姓名查找n“);printf(“ 4.3 按成绩查找n“);printf(“
10、 5.根据总成绩排序n“);printf(“ 6.存储到文件n“);printf(“ 7.从文件导出n“);printf(“ 8.退出系统n“);a: printf(“ 请选择:“);scanf(“%d“,switch (n)case 1:DengJi();break;case 2:ShanChu();break;case 3:LiuLan();break;case 4:ChaZhao();break;case 5:PaiXu();break;case 6:CunChu();break;case 7:DaoChu();break;case 8:exit(0);break;default:pri
11、ntf(“请输入 1-8 之间的数字,谢谢!n“);goto a;main()menu();第五章 程序的运行及结果分析主界面在主界面上选择需要进行什么操作。选择 1:则登记一个学生的信息。界面如下:提示输入几个学生的信息,用户输入数据后,系统提示输入学生的学号,姓名和三门课的成绩,用户分别输入数据后,系统提示是否继续操作,如果还继续操作,输入“yes” ,则出现下面的界面:如果不需要操作了,则输入“no” ,结束整个系统。如果输入内容既不是 yes 也不是 no,比如输入 ya,则出现下面界面:如果在主界面再次选择 1,则可以在前面的基础上再次登记学生,注意不能把前面的学生覆盖!选择 2:可
12、以删除全部学生的信息,也可以删除指定某个学生姓名的信息。当在主界面选择 2 时,进入下面的界面:如果输入 all,则会删除所有的信息。如果删除某个学生的信息,则输入 one。当输入 one 时,则会要求输入需要删除学生的学号,例如输入 01,回车以后,确认删除,显示删除成功。输入 yes 或者 no 的操作参照选择 1.选择 3:可以浏览所有学生的信息。回车确认后,出现下面的界面:(本来输入了两个人的信息,但是删除了张三的信息,所以现在只是剩下一个人的信息)可以浏览输入的所有学生的信息(不管输入几次,都要全部显示) 。输入 yes 或者 no 的操作参照选择 1.选择 4:进行查找操作。按照不
13、同的方式查找。选择 4 后,回车确认,出现下面的界面:当输入一种方式进行查找的时候,例如输入姓名则要求输入某个学生的姓名,例如输入李四,显示下面的界面:(其他方式显示类似)注意,如果输入的数据有误,则提示输入错误,如果系统中没有任何学生,则提示没有学生信息。输入 yes 或者 no 的操作参照选择 1.选择 5:回车确认后,显示一下界面, (重新录入的数据)总成绩按照降序排列。输入 yes 或者 no 的操作参照选择 1.选择 6,则可以保存数据。回车确认后,显示文件保存成功!输入 yes 或者 no 的操作参照选择 1.选择 7,导出文件回车确认后则可以继续操作上次保存的数据。输入 yes
14、或者 no 的操作参照选择1第六章 遇到的问题及解决方法在开始进行课程设计时,先进行界面模块的总体把握,充分了解自己要设计的程序的总体的结构,从而,在其过程中能一个模块一个函数进行详细的构思,从而在调试程序时也显得比较轻松,虽说随着程序代码的不断增多、其复杂性不断增大,但是因为是分模块函数一个一个的调试;最后在将其模块用多文件编译运行时没有遇到语法错误。但是,运行结果完全不正确,常常出现乱码和死循环等原因。在此课程设计中,不仅综合了数据结构的知识,而且还综合了文件处理数据的知识,难度显得较难,但这些功能还是能在较快的时间内完成,倒是课本上那些属于基础和细节上的知识点总不知道如何使用它、常常用错
15、它,如在使用 switch() 、while()和 scanf()等语句上,有时因用错它们,使程序无法停止。通过查找资料、与同学的相互讨论及请教师兄,程序终于正确地运行。在此过程中,学到的不止是如何调试这个知识,学到得最多的是一种遇到不懂问题怎么去解决的方法和在遇到困难时心态的调节。第七章 总结和体会通过半个月的努力,终于完成了这次 C 语言程序设计。在这个学生信息管理系统C 语言课程设计中,完成了基本功能,即可以检索记录、新建新记录、删除记录、使用文件对记录进行保存和读取功能。在开始进行课程设计时,先进行界面模块的总体把握,充分了解自己要设计的程序的总体的结构,从而,在其过程中能一个模块一个函数进行详细的构思,从而在调试程序时也显得比较轻松。虽然出现了很多的错误,但是通过自己和同学的共同努力,终于找到错误并加以改正。同时也要感谢老师的指导与帮助,使我能够在短时间内完成这份程序设计,十分的感谢老师。总的来说,这次课程设计收获很多,为了完成这次设计,参考了一些书籍,细看了课本,了解了以前常忽视却很重要的东西,深化了对 C 语言的理解,进一步理解对 C 语言进行程序设计的方法和步骤,加深了结构化程序设计的思想,更重要的是,积累了很多调试程序的经验,为进一步学习 C 语言奠定了一定的基础,同时也为今后的学习和生活奠定了基础,有利于今后的发展。