您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 人事档案/员工关系 > 基于C语言的学生选课管理系统
PINGDINGSHANUNIVERSITY基础编程能力实训报告题目:学生选课管理系统专业年级:物联网工程2014级姓名:DFDSFDFDfdfdfffd学号:14fdfkdkd2015年07月03日1功能描述此系统是一个学生选课管理系统。它包含是功能有:学生选课信息的录入,学生选课信息的删除,学生选课信息的查找,学生选课信息的显示等功能。菜单模式:此模块主要实现对本系统所有功能的显示。录入模块:此模块主要实现对学生选课信息的录入,主要包括学生学号、学生姓名、所选课程、课程学分、授课老师。删除模式:此模块主要实现对学生选课信息的删除。显示模块:此模块主要实现对学生选课信息的显示。查找模块:此模块主要是通过学生学号查找该学生的选课信息。清屏模块:此模块主要是对主界面输入的信息进行清屏。退出程序:此模块主要用于退出系统。2总体设计2.1主函数功能调用main函数开始学生选课系统菜单功能清屏功能录入功能删除功能查找功能保存功能退出功能显示功能123645①主函数的作用主要是调用menu函数显示主界面,由于菜单比较简单所以采用printf函数直接将菜单项打印在屏幕上,实现人机对话的第一步。②然后通过读取用户的输入,调用switch函数对用户的输入进行进一步的处理,并使用for函数实现用户的选择性的重复操作。我们为用户提供了一个正常的出口,我们采用人机对话的形式,用户选择某一菜单以后,程序完成此项功能后,用户可以选择继续输入或退出,选择主菜单5选项即可退出程序。2.2删除模块输入选择的值选择的值=?调用input函数调用del函数调用display函数调用find函数退出程序定义学生指针调用del函数清屏结束开始否是为了实现用户使用学生选课信息管理系统删除所选课程的功能,删除模块调用del函数以实现这一功能。用户先输入要删除的学生个数,然后用户输入编号,通过fread循环遍历文件中输入的数据,查找与用户输入的学生编号相同的学生选课信息,如果找到该学生,则把m赋为1,然后通过for(j=i;jm;j++);wor[j]=wor[j+1]把要查找的数据后面的前移来删除该学生信息。如果找不到该学生信息,则显示找不到要删除的学生。2.3查找信息是否已创建该学生信息?成功删除按任意键返回记录总数减一输入要删除的人数和学生学号输入要查找的学生学号定义学生指针结束开始显示“找不到要删除的节点!”否是Y(y)为了实现用户使用学生选课信息管理系统查找学生信息的功能,查找模块调用find函数以实现这一功能。该程序里运用文件和指针,通过fread循环遍历文件中输入的数据,查找与用户输入的学生编号相同的学生选课信息,如果找到该学生,则显示该学生的选课信息。3数据结构设计存储学生选课信息的结构体typedefstruct//定义结构体{intnum;//学生的学号charname[20];//学生的姓名是否显示该学生的详细信息?Y(y)(是)按任意键返回结束显示“没有找到要查找的结点!显示学生详细信息找到记录是否显示该学生的详细信息?Y(y)(是)charkeming[20];//选课的名称floatxuefen;//所选课程的学分charteacher[20];//所选课程的任课老师}WOR;WORwor[SIZE],wor1[SIZE];结构体用于存储学生选课信息的相关信息,各字段的含义如下:num:学生学号name[20]:学生姓名keming[20]:选课课名xuefen:选课学分teacher:授课老师4程序实现4.1源码分析主函数显示主菜单模块通过调用menu函数显示主菜单,调用main函数提示使用的用户该执行的操作,实现基本的人机对话;然后通过读取用户的输入,调用switch函数对用户的输入进行进一步的处理,并使用while函数实现用户的选择性的重复输入;显示学生选课管理信息模块通过调用display函数实现显示已创建的所有学生选课管理信息的功能;查找学生选课管理信息模块通过调用find函数实现按学生学号查找学生的选课信息的功能;intmain(){inti,d;menu();while(1){printf(\n输入选项:);scanf(%d,&d);switch(d){case1:input();break;///输入信息case2:{intm;printf(请输入要删除的人数:\n);scanf(%d,&m);for(i=0;im;i++)del();getch();printf(按任意键继续:);getch();clear();///清屏}break;///删除信息case3:display();break;///显示信息case4:{intm;printf(请输入要查找的人数:\n);scanf(%d,&m);for(i=0;im;i++)find();getch();printf(按任意键继续:);getch();clear();///清屏}break;///查找case5:exit(0);break;///退出case6:clear();break;///清屏default:printf(您输入的数据有误,请重新输入:);///clear();}}}4.2输入信息功能函数此函数为输入学生选课情况的基本信息。通过运用文件和指针输入实现所有学生选课信息的存储,从而实现程序的第一步操作。运用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的输入voidinput()///输入信息{inti,m=0;charch[2];FILE*fp;if((fp=fopen(work,ab+))==NULL){printf(can'topenthefile!\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'topenthefile!\n);return;}for(i=0;im;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;im;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();}}4.3删除信息功能函数此函数为学生选课信息的删除过程。删除学生选课管理信息模块通过调用del函数实现通过查找学生学号找到想要删除的课程,从而删除用户想要删除的课程的功能;运用文件的知识实现文件的打开。运用for循环来确定删除的个数,然后通过if语句依次根据学生学号对学生选课信息进行删除。再次运用for循环使删除学生信息后将记录的总个数减1,将后一个记录移到前一个记录的位置。最后使用clear()功能,再次运用fopen()打开文件,用fwrite()将更改后的记录重新写入指定的磁盘文件中,并保存。voiddel()///删除信息{FILE*fp;intsnum,i,j,m=0;charch[2];if((fp=fopen(work,ab+))==NULL){printf(can'topenthefile!\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;im;i++){if(snum==wor[i].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++)wor[j]=wor[j+1];//将后一个记录移到前一个记录的位置m--;//记录的总个数减1printf(成功删除!\n);clear();//清屏}if((fp=fopen(work,wb+))==NULL){printf(不能打开!\n);return;}for(j=0;jm;j++)//将更改后的记录重新写入指定的磁盘文件中if(fwrite(&wor[j],LEN,1,fp)!=1){printf(不能保存!\n);getch();}fclose(fp);}4.2功能模块的调试及测试1.主界面该部分只有主菜单。若选择1,则进入学生选课信息输入界面;若选择2,则进入学生选课信息删除界面;若选择3,则进入学生选课信息显示界面;若进入4,则进入学生选课信息查找界面;若选择5,则直接退出系统;若选择6,则选择直接清屏.(运行程序见图1)图1主界面2.输入界面根据提示,当选择1时,系统会先提示是否输入信息,当输入“Y”或“y”,则进出正式的学生信息输入阶段,会依次提示输入学生学号、学生姓名、已选课程、学分、任课老师,并且这些内容会保存到文件名为“work”的文件中。然后系统会进入清屏环节,在下一页系统提示是否继续输入,输入“n”,则结束输入。(运行界面见图2)图2信息输入界面3.显示界面根据系统提示输入3,则会显示已保存的学生选课信息。(运行界面见图3)图3显示界面4.删除界面根据系统提示输入2,然后系统会提示输入所要删除的人数,输入人数后,系统会根据你输入的人数来进行循环删除,单次删除过程为:先提示请输入需要删除的学号,找到记录后,提示是否删除,输入“Y”或”y”,显示成功删除。(运行界面见图4)为了使系统更加完整的体现该功能,再次输入3显示已保存的信息,前后对比,可清晰的体现删除功能(运行界面见图3、5)图4删除界面图5再次显示界面5实训总结经过连续几周的时间,终于学生选课管理系统程序设计完成了。虽然在这之前,我们已经对c语言这门课程学习了一个学期,对其有了一定的了解,但是也仅仅只是
本文标题:基于C语言的学生选课管理系统
链接地址:https://www.777doc.com/doc-6010990 .html