学生选课系统设计报告
- 格式:doc
- 大小:162.50 KB
- 文档页数:25
*******************实践教学*******************兰州理工大学计算机与通信学院2017年春季学期C程序设计课程设计题目:学生选课系统专业班级:应用物理*名:***学号:**********指导教师:**成绩:学生选课系统摘要学生选课系统是教育单位不可缺少的重要系统组成部分,他对于学校的决策者、管理者管理、查看课程来说都有至关重要,所以学生选课系统应该能够为广大学、师生提供充足的信息和快捷的课程选择过程,有助于学生选好每一门课程,此系统选课方便、快捷,用简单的界面来展示学生的选课信息,可以提高对学生信息管理的效率。
关键词:方便,快捷,选课信息,选择,管理C程序设计课程设计报告目录1题目要求 (4)2需求分析 (4)2.1功能简介 (4)3总体设计 (4)4详细设计 (5)4.1 系统主要函数说明 (5)4.1.1 主函数 (6)4.1.2 input函数 (7)4.1.3del函数 (8)4.1.4find函数 (9)4.1.5display函数 (9)5 系统测试 (10)6总结 (13)参考文献 (14)致谢 (15)附录: (16)源程序 (16)1题目要求设计一个关于学生选课方便简捷的程序,从而达到学生能够快速的选到课程。
2需求分析数据结构可用结构体,包括课程和选修两个结构体,其中课程结构体成员包括课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期。
选修结构体成员包括学号,课程编号,该结构体的建立主要是为了查询某门课程学生选修情况。
2.1功能简介此系统是一个学生选课管理系统。
它包含功能有:学生选课信息的录入,学生选课信息的删除,学生选课信息的查找,学生选课信息的显示等功能。
菜单模式:此模块主要实现对本系统所有功能的显示。
录入模块:此模块主要实现对学生选课信息的录入,主要包括学生学号、学生姓名、所选课程、课程学分、授课老师。
删除模式:此模块主要实现对学生选课信息的删除。
显示模块:此模块主要实现对学生选课信息的显示。
查找模块:此模块主要是通过学生学号查找该学生的选课信息。
清屏模块:此模块主要是对主界面输入的信息进行清屏。
退出程序:此模块主要用于退出系统。
4详细设计4.1 系统主要函数说明4.1.1 主函数主函数显示主菜单模块通过调用menu函数显示主菜单,调用main函数提示使用的用户该执行的操作,实现基本的人机对话;然后通过读取用户的输入,调用switch函数对用户的输入进行进一步的处理,并使用while函数实现用户的选择性的重复输入;显示学生选课管理信息模块通过调用display函数实现显示已创建的所有学生选课管理信息的功能;查找学生选课管理信息模块通过调用find函数实现按学生学号查找学生的选课信息的功能;4.1.2 input函数此函数为输入学生选课情况的基本信息。
通过运用文件和指针输入实现所有学生选课信息的存储,从而实现程序的第一步操作。
运用if语句判断文件是否存在;若不存在,则建立一个名为”work”的文件,将所有信息保存文件中。
在文件中fopen()以ab+的方法打开二进制文件,使函数返回指向一个文件指针work;以fread(&wor[m],LEN,1,fp) 从fp所指向的文件中读取1个字节数为LEN大小的数据块存放到&wor[m]所指定的存储空间;以fwrite(&wor[i] ,LEN,1, fp) 从fp所指向的存储空间中取出1个字节数为LEN大小的数据块写入&wor[m]所指定的存储空间。
运用字符串ch[2]实现判断”是否”的字符Y/N的输入2]实现判断”是否”的字符Y/N的输入4.1.3del函数此函数为学生选课信息的删除过程。
删除学生选课管理信息模块通过调用del函数实现通过查找学生学号找到想要删除的课程,从而删除用户想要删除的课程的功能;运用文件的知识实现文件的打开。
运用for循环来确定删除的个数,然后通过if语句依次根据学生学号对学生选课信息进行删除。
再次运用for循环使删除学生信息后将记录的总个数减1,将后一个记录移到前一个记录的位置。
最后使用clear()功能,再次运用fopen()打开文件,用fwrite()将更改后的记录重新写入指定的磁盘文件中,并保存。
4.1.4find函数为了实现用户使用学生选课信息管理系统查找学生信息的功能,查找模块调用find函数以实现这一功能。
该程序里运用文件和指针,通过fread循环遍历文件中输入的数据,查找与用户输入的学生编号相同的学生选课信息,如果找到该学生,则显示该学生的选课信息。
5 系统测试5.1主界面该部分只有主菜单。
若选择1,则进入学生选课信息输入界面;若选择2,则进入学生选课信息删除界面;若选择3,则进入学生选课信息显示界面;若进入4,则进入学生选课信息查找界面;若选择5,则直接退出系统;若选择6,则选择直接清屏.5.2输入界面根据提示,当选择1时,系统会先提示是否输入信息,当输入“Y”或“y”,则进出正式的学生信息输入阶段,会依次提示输入学生学号、学生姓名、已选课程、学分、任课老师,并且这些内容会保存到文件名为“work”的文件中。
然后系统会进入清屏环节,在下一页系统提示是否继续输入,输入“n”,则结束输入。
5.3显示界面根据系统提示输入3,则会显示已保存的学生选课信息.5.4删除界面根据系统提示输入2,然后系统会提示输入所要删除的人数,输入人数后,系统会根据你输入的人数来进行循环删除,单次删除过程为:先提示请输入需要删除的学号,找到记录后,提示是否删除,输入“Y”或”y”,显示成功删除.为了使系统更加完整的体现该功能,再次输入3显示已保存的信息,前后对比,可清晰的体现删除功能6总结经过连续二周的时间,终于学生选课管理系统程序设计完成了。
虽然在这之前,我们已经对c语言这门课程学习了一个学期,对其有了一定的了解,但是也仅仅只是停留在了解的范围,对里面的好多东西还是很陌生,更多的在运用起来的时候还是感到很棘手,毕竟,以前从来没接触过这些,所以学起来会觉得有些费劲。
由于之前学习C语言可能没花多少时间,对里面有些知识一窍不通,所以要用C语言的知识来设计一个学生选课管理系统,对我来讲是有一定难度的。
不过还好,我们班的同学都很好,他们孜孜不倦的教我,这使我相当的感动。
对于这次的课程设计我的完成过程主要是这样子的。
首先我分析了相关的题目内容,并参考了书上的学生管理系统和网上的一些相关资料然后才开始正式进行设计。
一开始不知从何下手但后来又分析了一下题目。
知道了学生选课管理系统主要就是有一些操作来完成,这些操作包括:输入学生选课信息、删除学生选课信息、显示学生选课信息、查找学生选课信息等等。
同时通过这几天的程序及报告编写,我也发现了自己的很多不足,自己知识的很多漏洞,看到了自己的实践经验还是比较缺乏,理论联系实际的能力还是比较脆弱。
尤其是编写大型的程序所要拥有的知识和技能比较缺乏。
程序编好了,还要经过调试和修改,这步也很关键,好的程序是经过了无数次的修改和调试才产生的。
在同学的帮助下我的程序基本上能够满足要求,但还有一些地方需要改进,在今后我应该在多看书的同时还要加强实践的练习。
才能进一步提高自己的编程能力。
参考文献[1] 何钦铭.颜晖. C语言程序设计(第3版). 北京:高等教育出版社,2015.8[2] 颜晖.张泳. C语言程序设计实验与习题指导(第3版). 北京:高等教育出版社,2015.8[3] 谭浩强.C语言程序设计.清华大学出版社,2010.6[4] 谭浩强.C程序设计题解与上机指导.清华大学出版社,2010.6[5] C语言函数手册.机械工业出版社,1999[6] C语言的实际应用.安徽科学技术出版社,2000致谢在这次c语言课程设计中,首先得感谢李老师给予我们指导与帮助,在她的指导帮助下,才使得我们能够顺利的完成课程设计,更重要的是在这次课程设计中,极大的提高我的c语言设计能力,也让我深刻的了解到自己在这方面的诸多不足,使得我能更清楚的了解自己的水平,加强了我对这门学科的认识。
同时也感谢和我一起完成这课设的王云龙同学,我们在互相交流帮助中也相互学习到许多小的应用技巧,解决了一些列问题。
还要感谢那些给予我们帮助的同学,也给了我很大的帮助。
附录:源程序#include <stdio.h>#include <conio.h>#include <stdlib.h>#include <string.h>#define SIZE 300#define LEN sizeof(WOR)typedef struct{int num;char name[20];char keming[20];float xuefen;char teacher[20];}WOR;WOR wor[SIZE], WOR1[SIZE];int flag;void menu()///菜单{printf ("\n\n\n");printf ("\t\t 学生选课管理系统\n\n");printf ("\t\t 1 输入信息 2 删除信息\n\n");printf ("\t\t 3 显示信息 4 查找信息\n\n");printf ("\t\t 5 退出 6 清屏\n\n");}void clear(){system("cls");menu();}void input()///输入信息{int i, m=0;char ch[2];FILE *fp;if((fp=fopen("work", "ab+"))==NULL){printf ("can't open the file!\n");return;}while(!feof(fp)){if(fread(&wor[m],LEN, 1,fp)==1)m++;}fclose(fp);if(m==0)printf ("没有找到要读取的节点\n");if((fp=fopen("work", "wb+"))==NULL){printf ("can't open the file!\n");return;}for (i=0; i<m; i++)fwrite(&wor[i], LEN, 1, fp);//向指定的磁盘文件写入信息printf ("是否输入?(y/n):");scanf ("%s", ch);while (strcmp(ch, "Y")==0||strcmp(ch, "y")==0)//判断是否要录入新信息{printf ("学生学号:");scanf ("%d",&wor[m].num);//for (i=0; i<m; i++)if(wor[i].num==wor[m].num){printf("该记录已经存在,按任意键继续!");getch();fclose(fp);return;}printf ("学生姓名:");scanf ("%s", wor[m].name);//输入学生姓名printf ("已选课程:");scanf("%s", wor[m]. keming);//输入已选课程printf ("学分:");scanf("%f",& wor[m]. xuefen);//输入课程学分printf ("任课老师:");scanf("%s", wor[m]. teacher);if(fwrite(&wor[m],LEN, 1, fp)!=1)//将新录入的学生信息写入指定的磁盘文件{printf("无法保存!");getch();}else{printf("%s 已经保存!\n",wor[m].name);m++;}clear();///清屏printf("是否继续?(y/n):");scanf("%s",ch);}fclose(fp);if(strcmp(ch,"N")==0||strcmp(ch,"n")==0) {printf("按任意键继续!\n");getch();clear();}}void del()///删除信息{FILE *fp;int snum,i,j,m=0;char ch[2];if((fp=fopen("work","ab+"))==NULL){printf("can't open the file!\n"); return;}while(!feof(fp)){if(fread(&wor[m],LEN,1,fp)==1) m++;}fclose(fp); if(m==0){printf("没有记录\n");return;}printf("请输入编号:");scanf("%d",&snum);for(i=0; i<m; i++){if(snum==wor[i].num)break;} if(i==m){printf("没有找到要删除的节点\n");getch();return;}printf("找到记录,是否删除(y/n)");scanf("%s",ch);scanf("%s",ch);if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)//判断是否要进行删除{for(j=i; j<m; j++)wor[j] = wor[j+1];//将后一个记录移到前一个记录的位置m--;//记录的总个数减1 printf("成功删除!\n");}if((fp=fopen("work","wb+"))==NULL){printf("不能打开!\n");return;}for(j=0; j<m; j++) //将更改后的记录重新写入指定的磁盘文件中if(fwrite(&wor[j] ,LEN,1,fp)!=1){printf("不能保存!\n");getch();}fclose(fp);}void find()//查找休息{///clear();///清屏FILE *fp;int snum,i,m=0;char ch[2];if((fp=fopen("work","ab+"))==NULL){printf("can't open the file!\n");return;}while(!feof(fp)){if(fread(&wor[m],LEN,1,fp)==1) m++;}fclose(fp);if(m==0){printf("没有记录\n");return;}printf("请输入学号:");scanf("%d",&snum);for(i=0; i<m; i++){if(snum==wor[i].num)break;}if(i==m){printf("没有找到要查找的节点\n");getch();flag = 1;return;}printf("找到记录");printf("是否显示该学生的详细信息:(Y/N)");scanf("%s",ch);if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0){ printf("学号姓名已选课程学分任课老师\n");printf("%-9d\t%s\t\t%s\t%10.1f\t\t%s\n",wor[i].num,wor[i].name,wor[i].kemin g,wor[i].xuefen,wor[i].teacher);}fclose(fp);}void display()///显示信息{FILE *fp;int i,m=0;fp=fopen("work","ab+");while(!feof(fp)){if(fread(&wor[m],LEN,1,fp))m++;}fclose(fp);printf("学号姓名已选课程学分任课老师\n");for(i=0; i<m; i++){printf("%-9d\t%s\t\t%s\t%10.1f\t\t%s\n",wor[i].num,wor[i].name,wor[i].kemin g,wor[i].xuefen,wor[i].teacher);}getch();printf("按任意键继续!\n");getch();clear();///清屏}int main(){int i,d;menu();while(1){printf("\n输入选项:");scanf("%d",&d);switch(d){case 1:input();break;///输入信息case 2:{int m;printf("请输入要删除的人数:\n");scanf("%d",&m);for(i=0; i<m; i++)del();getch();printf("按任意键继续:");getch();clear();///清屏}break;///删除信息case 3:display();break;///显示信息case 4:{int m;printf("请输入要查找的人数:\n");scanf("%d",&m);for(i=0; i<m; i++)find();getch();printf("按任意键继续:");getch();clear();///清屏}break;///查找case 6:clear();break;///清屏case 5:exit(0);break;///退出default:printf("您输入的数据有误,请重新输入:");///clear();}}}。