《基础编程能力实训报告基于c语言的学生选课管理系统大学论文.doc》由会员分享,可在线阅读,更多相关《基础编程能力实训报告基于c语言的学生选课管理系统大学论文.doc(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 PINGDINGSHAN UNIVERSITY基础编程能力实训报告 题 目: 学生选课管理系统 专业年级: 物联网工程 2014级 姓 名: DFDSFDFDfdfdfffd 学 号: 14fdfkdkd 2015年07月03日1 功能描述此系统是一个学生选课管理系统。它包含是功能有:学生选课信息的录入,学生选课信息的删除,学生选课信息的查找,学生选课信息的显示等功能。菜单模式:此模块主要实现对本系统所有功能的显示。录入模块:此模块主要实现对学生选课信息的录入,主要包括学生学 号、学生姓名、所选课程、课程学分、授课老师。删除模式:此模块主要实现对学生选课信息的删除。显示模块:此模块主要实现对
2、学生选课信息的显示。查找模块:此模块主要是通过学生学号查找该学生的选课信息。清屏模块:此模块主要是对主界面输入的信息进行清屏。退出程序:此模块主要用于退出系统。 学生选课系统菜单功能清屏功能录入功能删除功能查找功能保存功能退出功能显示功能 2 总体设计2.1 主函数功能开 始调用main函数输入选择的值选择的值=? 1 2 3 6 4 5调用find函数调用display函数调用del函数调用input函数 退出程序 清 屏 结 束主函数的作用主要是调用menu函数显示主界面,由于菜单比较简单所以采用printf函数直接将菜单项打印在屏幕上,实现人机对话的第一步。然后通过读取用户的输入,调用s
3、witch函数对用户的输入进行进一步的处理,并使用for函数实现用户的选择性的重复操作。我们为用户提供了一个正常的出口,我们采用人机对话的形式,用户选择某一菜单以后,程序完成此项功能后,用户可以选择继续输入或退出,选择主菜单5选项即可退出程序。2.2 删除模块开始定义学生指针调用del函数输入要删除的人数和学生学号 显示“ 找不到要删除的节点!”是否已创建该学生信息? 否 是 成功删除 记录总数减一 按任意键返回 结束为了实现用户使用学生选课信息管理系统删除所选课程的功能,删除模块调用del函数以实现这一功能。用户先输入要删除的学生个数,然后用户输入编号,通过fread循环遍历文件中输入的数据
4、,查找与用户输入的学生编号相同的学生选课信息,如果找到该学生,则把m赋为1,然后通过for(j=i; jm; j+);worj = worj+1把要查找的数据后面的前移来删除该学生信息。如果找不到该学生信息,则显示找不到要删除的学生。2.3 查找信息开始定义学生指针输入要查找的学生学号显示“没有找到要查找的结点!是否显示该学生的详细信息?Y(y)(是) 否 是 找到记录 是否显示该学生的详细信息?Y(y)(是) Y(y) 显示学生详细信息 按任意键返回结束为了实现用户使用学生选课信息管理系统查找学生信息的功能,查找模块调用find函数以实现这一功能。 该程序里运用文件和指针,通过fread循环
5、遍历文件中输入的数据,查找与用户输入的学生编号相同的学生选课信息,如果找到该学生,则显示该学生的选课信息。3 数据结构设计存储学生选课信息的结构体typedef struct /定义结构体 int num; /学生的学号 char name20; /学生的姓名 char keming20; /选课的名称 float xuefen; /所选课程的学分 char teacher20; /所选课程的任课老师 WOR;WOR worSIZE,wor1SIZE;结构体用于存储学生选课信息的相关信息,各字段的含义如下: num:学生学号 name20:学生姓名 keming20: 选课课名xuefen:
6、选课学分 teacher : 授课老师4 程序实现4.1 源码分析 主函数显示主菜单模块通过调用menu函数显示主菜单,调用main函数提示使用的用户该执行的操作,实现基本的人机对话;然后通过读取用户的输入,调用switch函数对用户的输入进行进一步的处理,并使用while函数实现用户的选择性的重复输入;显示学生选课管理信息模块通过调用display函数实现显示已创建的所有学生选课管理信息的功能;查找学生选课管理信息模块通过调用find函数实现按学生学号查找学生的选课信息的功能;int main() int i,d; menu(); while(1) printf(n输入选项:); scanf
7、(%d,&d); switch(d) case 1: input();break;/输入信息 case 2: int m; printf(请输入要删除的人数:n); scanf(%d,&m); for(i=0; im; i+) del(); getch(); printf(按任意键继续:); getch(); clear();/清屏 break;/删除信息 case 3: display();break;/显示信息 case 4: int m; printf(请输入要查找的人数:n); scanf(%d,&m); for(i=0; im; i+) find(); getch(); printf
8、(按任意键继续:); getch(); clear();/清屏 break;/查找case 5: exit(0); break;/退出 case 6: clear(); break;/清屏 default: printf(您输入的数据有误,请重新输入:); /clear(); 4.2 输入信息功能函数此函数为输入学生选课情况的基本信息。通过运用文件和指针输入实现所有学生选课信息的存储,从而实现程序的第一步操作。运用 if语句判断文件是否存在;若不存在,则建立一个名为”work”的文件,将所有信息保存文件中。 在文件中fopen()以ab+的方法打开二进制文件,使函数返回指向一个文件指针 wor
9、k;以fread(&worm,LEN,1,fp) 从fp所指向的文件中读取1个字节数为LEN大小的数据块存放到&worm所指定的存储空间;以fwrite(&wori ,LEN,1, fp) 从fp所指向的存储空间中取出1个字节数为LEN大小的数据块写入&worm所指定的存储空间。运用字符串ch2实现判断”是否”的字符Y/N的输入 void input()/输入信息 int i,m=0; char ch2; FILE *fp; if(fp=fopen(work,ab+)=NULL) printf(cant open the file!n); return; while(!feof(fp) if(
10、fread(&worm,LEN,1,fp)=1) m+; fclose(fp); if(m=0) printf(没有找到要读取的节点n); if(fp=fopen(work,wb+)=NULL) printf(cant open the file!n); return; for(i=0; im; i+) fwrite(&wori ,LEN,1,fp);/向指定的磁盘文件写入信息 printf(是否输入?(y/n):); scanf(%s,ch); while(strcmp(ch,Y)=0|strcmp(ch,y)=0)/判断是否要录入新信息 printf(学生学号:); scanf(%d,&w
11、orm.num);/ for(i=0; im; i+) if(wori.num = worm.num) printf(该记录已经存在,按任意键继续!); getch(); fclose(fp); return; printf(学生姓名:); scanf(%s,worm.name); /输入学生名字 printf(已选课程:); scanf(%s,worm.keming); /输入已选课程 printf(学分:); scanf(%f,&worm.xuefen); /输入课程学分 printf(任课老师:); scanf(%s,worm.teacher); if(fwrite(&worm,LEN,
12、1,fp)!=1) /将新录入的学生信息写入指定的磁盘文件 printf(无法保存!); getch(); else printf(%s 已经保存!n,worm.name); m+; clear();/清屏 printf(是否继续?(y/n):); scanf(%s,ch); fclose(fp); if(strcmp(ch,N)=0|strcmp(ch,n)=0) printf(按任意键继续!n); getch(); clear(); 4.3 删除信息功能函数 此函数为学生选课信息的删除过程。删除学生选课管理信息模块通过调用del函数实现通过查找学生学号找到想要删除的课程,从而删除用户想要删
13、除的课程的功能;运用文件的知识实现文件的打开。运用for循环来确定删除的个数,然后通过if语句依次根据学生学号对学生选课信息进行删除。再次运用for循环使删除学生信息后将记录的总个数减1,将后一个记录移到前一个记录的位置。最后使用clear()功能,再次运用fopen()打开文件,用fwrite()将更改后的记录重新写入指定的磁盘文件中,并保存。 void del()/删除信息 FILE *fp; int snum,i,j,m=0; char ch2; if(fp=fopen(work,ab+)=NULL) printf(cant open the file!n); return; while
14、(!feof(fp) if(fread(&worm,LEN,1,fp)=1) m+; fclose(fp); if(m=0) printf(没有记录n); return; printf(请输入学号:); scanf(%d,&snum); for(i=0; im; i+) if(snum=wori.num) break; if(i=m) printf(没有找到要删除的节点n); getch(); return; printf(找到记录,是否删除(y/n); scanf(%s,ch); if(strcmp(ch,Y)=0|strcmp(ch,y)=0)/判断是否要进行删除 for(j=i; jm;
15、 j+) worj = worj+1;/将后一个记录移到前一个记录的位置 m-;/记录的总个数减1 printf(成功删除!n); clear();/清屏 if(fp=fopen(work,wb+)=NULL) printf(不能打开!n); return; for(j=0; jm; j+) /将更改后的记录重新写入指定的磁盘文件中 if(fwrite(&worj ,LEN,1,fp)!=1) printf(不能保存!n); getch(); fclose(fp);4.2 功能模块的调试及测试1. 主界面 该部分只有主菜单。若选择1,则进入学生选课信息输入界面;若选择2,则进入学生选课信息删除
16、界面;若选择3,则进入学生选课信息显示界面;若进入4,则进入学生选课信息查找界面;若选择5,则直接退出系统;若选择6,则选择直接清屏.(运行程序见图1) 图1 主界面2.输入界面 根据提示,当选择1时,系统会先提示是否输入信息,当输入“Y”或 “y”,则进出正式的学生信息输入阶段,会依次提示输入学生学号、学生姓名、已选课程、学分、任课老师,并且这些内容会保存到文件名为“work”的文件中。然后系统会进入清屏环节,在下一页系统提示是否继续输入,输入“n”, 则结束输入。(运行界面见图2) 图2 信息输入界面3. 显示界面 根据系统提示输入3,则会显示已保存的学生选课信息。(运行界面见图3) 图3
17、 显示界面4.删除界面根据系统提示输入2,然后系统会提示输入所要删除的人数,输入人数 后,系统会根据你输入的人数来进行循环删除,单次删除过程为:先提示请输入需要删除的学号,找到记录后,提示是否删除,输入“Y”或”y”,显示成功删除。(运行界面见图4)为了使系统更加完整的体现该功能,再次输入3显示已保存的信息,前后对比,可清晰的体现删除功能(运行界面见图3、5) 图4 删除界面 图5 再次显示界面5 实训总结 经过连续几周的时间,终于学生选课管理系统程序设计完成了。虽然在这之前,我们已经对c语言这门课程学习了一个学期,对其有了一定的了解,但是也仅仅只是停留在了解的范围,对里面的好多东西还是很陌生
18、,更多的在运用起来的时候还是感到很棘手,毕竟,以前从来没接触过这些,所以学起来会觉得有些费劲。由于之前学习C语言可能没花多少时间,对里面有些知识一窍不通,所以要用C语言的知识来设计一个学生选课管理系统,对我来讲是有一定难度的。不过还好,我们班的同学都很好,他们孜孜不倦的教我,这使我相当的感动。对于这次的课程设计我的完成过程主要是这样子的。首先我分析了相关的题目内容,并参考了书上的学生管理系统和网上的一些相关资料然后才开始正式进行设计。一开始不知从何下手但后来又分析了一下题目。知道了学生选课管理系统主要就是有一些操作来完成,这些操作包括:输入学生选课信息、删除学生选课信息、显示学生选课信息、查找
19、学生选课信息等等。同时通过这几天的程序及报告编写,我也发现了自己的很多不足,自己知识的很多漏洞,看到了自己的实践经验还是比较缺乏,理论联系实际的能力还是比较脆弱。尤其是编写大型的程序所要拥有的知识和技能比较缺乏。程序编好了,还要经过调试和修改,这步也很关键,好的程序是经过了无数次的修改和调试才产生的。在同学的帮助下我的程序基本上能够满足要求,但还有一些地方需要改进,在今后我应该在多看书的同时还要加强实践的练习。才能进一步提高自己的编程能力。附录:#include#include#include#include#define SIZE 300#define LEN sizeof(WOR)type
20、def struct int num; char name20; char keming20; float xuefen; char teacher20; WOR;WOR worSIZE,wor1SIZE;int flag;void menu()/菜单 printf(nnn); printf(tt 学生选课管理系统nn); printf(tt1 输入信息 2 删除信息 nn); printf(tt3 显示信息 4 查找信息 nn); printf(tt5 退出 6 清屏nn);void clear() system(cls); menu();void input()/输入信息 int i,m=
21、0; char ch2; FILE *fp; if(fp=fopen(work,ab+)=NULL) printf(cant open the file!n); return; while(!feof(fp) if(fread(&worm,LEN,1,fp)=1) m+; fclose(fp); if(m=0) printf(没有找到要读取的节点n); if(fp=fopen(work,wb+)=NULL) printf(cant open the file!n); return; for(i=0; im; i+) fwrite(&wori ,LEN,1,fp);/向指定的磁盘文件写入信息 p
22、rintf(是否输入?(y/n):); scanf(%s,ch); while(strcmp(ch,Y)=0|strcmp(ch,y)=0)/判断是否要录入新信息 printf(学生学号:); scanf(%d,&worm.num);/ for(i=0; im; i+) if(wori.num = worm.num) printf(该记录已经存在,按任意键继续!); getch(); fclose(fp); return; printf(学生姓名:); scanf(%s,worm.name); /输入学生名字 printf(已选课程:); scanf(%s,worm.keming); /输入已
23、选课程 printf(学分:); scanf(%f,&worm.xuefen); /输入课程学分 printf(任课老师:); scanf(%s,worm.teacher); if(fwrite(&worm,LEN,1,fp)!=1) /将新录入的学生信息写入指定的磁盘文件 printf(无法保存!); getch(); else printf(%s 已经保存!n,worm.name); m+; clear();/清屏 printf(是否继续?(y/n):); scanf(%s,ch); fclose(fp); if(strcmp(ch,N)=0|strcmp(ch,n)=0) printf(
24、按任意键继续!n); getch(); clear(); void del()/删除信息 FILE *fp; int snum,i,j,m=0; char ch2; if(fp=fopen(work,ab+)=NULL) printf(cant open the file!n); return; while(!feof(fp) if(fread(&worm,LEN,1,fp)=1) m+; fclose(fp); if(m=0) printf(没有记录n); return; printf(请输入编号:); scanf(%d,&snum); for(i=0; im; i+) if(snum=wo
25、ri.num) break; if(i=m) printf(没有找到要删除的节点n); getch(); return; printf(找到记录,是否删除(y/n); scanf(%s,ch); if(strcmp(ch,Y)=0|strcmp(ch,y)=0)/判断是否要进行删除 for(j=i; jm; j+) worj = worj+1;/将后一个记录移到前一个记录的位置 m-;/记录的总个数减1 printf(成功删除!n); if(fp=fopen(work,wb+)=NULL) printf(不能打开!n); return; for(j=0; jm; j+) /将更改后的记录重新写
26、入指定的磁盘文件中 if(fwrite(&worj ,LEN,1,fp)!=1) printf(不能保存!n); getch(); fclose(fp);void find()/查找信息 /clear();/清屏 FILE *fp; int snum,i,m=0; char ch2; if(fp=fopen(work,ab+)=NULL) printf(cant open the file!n); return; while(!feof(fp) if(fread(&worm,LEN,1,fp)=1) m+; fclose(fp); if(m=0) printf(没有记录n); return;
27、printf(请输入学号:); scanf(%d,&snum); for(i=0; im; i+) if(snum=wori.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(%-9dt%stt%st%10.1ftt%sn,wori.num,wori.name,w
28、ori.keming,wori.xuefen,wori.teacher); fclose(fp);void display()/显示信息 FILE *fp; int i,m=0; fp=fopen(work,ab+); while(!feof(fp) if(fread(&worm,LEN,1,fp) m+; fclose(fp); printf(学号 姓名 已选课程 学分 任课老师n);for(i=0; im; i+) printf(%-9dt%stt%st%10.1ftt%sn,wori.num,wori.name,wori.keming,wori.xuefen,wori.teacher);
29、 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; im; i+) del(); getch(); printf(按任意键继续:); getch(); clear();/清屏 break;/删除信息 case 3: display(); break;/显示信息 case 4: int m; printf(请输入要查找的人数:n); scanf(%d,&m); for(i=0; im; i+) find(); getch(); printf(按任意键继续:); getch(); clear();/清屏 break;/查找 case 6: clear(); break;/清屏 case 5: exit(0); break;/退出 default: printf(您输入的数据有误,请重新输入:); /clear();
限制150内