70学生选修课程系统.docx
- 文档编号:10448836
- 上传时间:2023-02-11
- 格式:DOCX
- 页数:32
- 大小:83.11KB
70学生选修课程系统.docx
《70学生选修课程系统.docx》由会员分享,可在线阅读,更多相关《70学生选修课程系统.docx(32页珍藏版)》请在冰豆网上搜索。
70学生选修课程系统
沈阳航空工业学院
课程设计
学号200704033070
班级7403302
姓名徐航
指导教师王晓岩
2009年3月1日
沈阳航空工业学院
课程设计任务书
院系:
航空宇航工程学院专业:
飞行器设计与工程班级:
7403302
学号:
200704033070题目:
学生选修课程系统
一、课程设计时间
2009年2月24日至2008年2月30日,共计1周,20学时。
二、课程设计内容
用C语言编写软件完成以下任务:
(1)录入课程信息(课程信息包括课程编号、课程名、学时和学分),并保存在lessons.txt文件中,课程按课程编号有序。
(2)添加课程信息:
添加前首先查找该门课是否存在,若不存在则按照课程编号大小插入到适当位置。
(3)选修一门课程:
需要给出学号和课程编号,如果课程编号不存在则重新输入,直到输入正确为止,并将学号和相应的课程编号存入SelectInfo.txt文件中。
(4)显示出所有学生的选课情况。
三、课程设计要求
1.程序质量:
✧贯彻结构化的程序设计思想。
✧用户界面友好,功能明确,操作方便;可以加以其它功能或修饰。
✧用户界面中的菜单至少应包括“输入课程信息”、“添加课程信息”、“选课及显示”、“退出”4项。
✧代码应适当缩进,并给出必要的注释,以增强程序的可读性。
2.课程设计说明书:
课程结束后,上交课程设计说明书和源程序。
课程设计说明书的格式和内容参见提供的模板。
四、指导教师和学生签字
指导教师:
________学生签名:
________
五、说明书成绩
六、教师评语
目录
一、需求分析1
二、程序流程图2
三、核心技术的实现说明及相应程序段6
四、课设总结12
五、参考文献13
六、源程序14
一、需求分析
经过对程序设计题目的分析可知,整个程序的设计实现大致分为六个模块,其中每一个模块对应一个函数,它们的功能分别是:
输入课程信息函数,添加课程信息函数,选修一门课程函数,显示选课情况函数,显示课程信息函数以及删除课程信息函数。
在这些函数当中,前四个函数的实现严格按照题目的要求,而后面的两个函数属于附加功能。
1、输入课程信息函数主要实现程序最初运行时课程数据的录入功能(课程信息包括课程编号、课程名、学时和学分),并且课程按课程编号有序;
2、添加课程信息函数实现的功能是第一次输入后的运行中课程数据的追加功能,追加的信息按编号顺序存入;
3、选修一门课程函数按照题目的具体要求实现的是给出学号和课程编号,如果课程编号不存在则重新输入,直到输入正确为止。
若输入正确则与相应的课程名一起存入文件中;
4、显示选课情况函数将选课情况显示在屏幕上,数据按学生学号有序;
5、显示课程信息函数实现的是显示所有存入的课程信息;
6、删除课程信息函数可以将某个课程信息删除。
除上面介绍的功能之外,程序还具有退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。
每一个学生记录都包含课程编号、课程名、学时和学分四项信息,在程序当中,将课程记录类型定义为结构体类型,添加以及追加的学生信息直接写入D盘的lessons.txt文件中,同时选课信息也定义为结构体类型,存储在D盘的SelectInfo.txt文件中。
其它函数每次对课程记录和选课记录的访问,其数据来源都是lessons.txt和SelectInfo.txt文件,这样做不但可以保证数据的一致性,而且可以对数据进行永久保存,保证每次运行程序都可以采用原来的数据。
二、程序流程图
1、程序总体结构图
图1程序总体结构图
2、具体功能框图
(1)添加课程数据函数add()
图2添加课程数据函数
(2)读取课程数据reads()
图3读取课程数据
(3)添加课程信息plus()
图4添加课程信息
(4)选修一门课程
图5选修一门课程
三、核心技术的实现说明及相应程序段
本程序主要由六个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其它函数来实现要求的所有功能。
在这些函数当中,输入课程信息、添加课程信息和选修一门课程是程序中较为核心的部分,下面分别进行说明。
1、输入课程信息
该函数的核心内容是按照课程编号的顺序向文件输入课程的信息。
这里根据用户想要添加的数目来把数据先放到结构体中,然后用“冒泡法”将其排序,再写入到文件中去。
具体程序段如下:
voidadd()/*输入选修课信息*/
{FILE*fp;
intn,i,j;
structlessonles[N],les1;
if((fp=fopen("d:
\\lessons.txt","w"))!
=NULL)/*新建选修课文件并添加信息*/
{printf("请问您想添加几门课程,按回车键确认:
");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf("\n请输入第%d个选修课程的编号、课程名、学时和学分,用空格分开,并按回车键确认:
\n",i);
scanf("%s%s%f%f",&les[i-1].num,&les[i-1].name,&les[i-1].hour,&les[i-1].point);
}
for(j=0;j {for(i=0;i if(strcmp(les[i].num,les[i+1].num)>0) {les1=les[i];les[i]=les[i+1];les[i+1]=les1;} } for(i=0;i } fclose(fp); } 2、添加课程信息 此函数先调用resds()函数,将文件中的课程信息读出并存放到结构体数组中。 然后将后追加的课程编号同已有的课程编号进行比较。 如果相同就输出: “该课程已存在”。 如果没有相同的课程编号,就说明是一门新课程。 先将此编号和已有的最小的编号进行比较,如果它比最小的还要小,就把原有的信息全向后移一位,然后将追加的信息存到第一位。 如果它比最小的大就再把它和最大的进行比较,如果它比最大的还要大,就把它放在最后一位。 否则就用for循环找到一个前一个编号比它小后一个比它大的位置。 把比它大的向后移动一位,然后把它插入到这个位置上。 最后将所有信息写入到文件中。 具体程序段如下: voidplus()/*添加课程*/ { structlessonles[N]; structlessonles1; FILE*fp; intn,i,j; reads(les,&n); printf("\n请输入要添加的选修课程的编号、课程名、学时和学分,用空格分开,并按回车键确认: \n"); scanf("%s%s%f%f",&les1.num,&les1.name,&les1.hour,&les1.point); for(i=0;i if(strcmp(les1.num,les[i].num)==0)break; if(i>=n) { if(strcmp(les[0].num,les1.num)>0) { for(i=n;i>0;i--) les[i]=les[i-1]; les[0]=les1; if((fp=fopen("d: \\lessons.txt","w"))! =NULL)/*新建选修课文件并添加信息*/ { for(i=0;i<=n;i++) fprintf(fp,"\n%s%s%f%f",les[i].num,les[i].name,les[i].hour,les[i].point);/*课程信息写入文件*/ } } elseif(strcmp(les1.num,les[n-1].num)>0) {les[n]=les1; if((fp=fopen("d: \\lessons.txt","w"))! =NULL)/*新建选修课文件并添加信息*/ { for(i=0;i<=n;i++) fprintf(fp,"\n%s%s%f%f",les[i].num,les[i].name,les[i].hour,les[i].point);/*课程信息写入文件*/ } } else {for(i=0;i if(strcmp(les1.num,les[i].num)>0&&strcmp(les1.num,les[i+1].num)<0) { for(j=n;j>i+1;j--) les[j]=les[j-1]; les[j]=les1; if((fp=fopen("d: \\lessons.txt","w"))! =NULL)/*新建选修课文件并添加信息*/ { for(i=0;i<=n;i++) fprintf(fp,"\n%s%s%f%f",les[i].num,les[i].name,les[i].hour,les[i].point);/*课程信息写入文件*/ } } } fclose(fp); } else { printf("该课程已存在\n"); return; } } 3、选修一门课程 这个函数同样调用reads()函数,将文件中的课程信息读出并存放到结构体数组中。 建立选课文件。 将键盘输入的信息和已有的课程标号进行比较,如果没有一样的,就输出“课程编号不正确! 请进重新输入! ”并且回到输入信息的位置,直到输入正确为止。 如果课程编号正确,就找到同一课程编号对应的课程名称,一起输入到文件中。 具体程序如下: voidselect()/*选择一门课程*/ { structlessonles[N]; structchoicecho; FILE*fp; intn,i,m=1; reads(les,&n); if((fp=fopen("d: \\SelectInfo.txt","a"))! =NULL)/*新建学生选课文件并添加信息*/ while(m) { printf("\n请输入您的学号和选修的课程编号,用空格分开,并按回车键确认: \n"); scanf("%s%s",&cho.numstu,&cho.numles); for(i=0;i if(strcmp(cho.numles,les[i].num)==0)break; {if(i { fprintf(fp,"%s%s%s\n",cho.numstu,cho.numles,les[i].name); printf("选择成功! \n"); m=0; } else printf("\n课程编号不正确! 请进重新输入! \n"); } } fclose(fp); } 四、课设总结 这是我第一次做工程,我体验到了做一名工程人员所必须具有的严谨。 一个变量定义上的错误,一个标点上的错误都可能造成程序的失败。 在这次编程训练中最难的不是思路,不是知识,而是是否能有一颗扎实的心,踏踏实实地找出程序中的每个错误。 有时错误难以找出,甚至还要用分步执行,观察每一个变量。 这是一项过程枯燥,结果正确时又充满成就感的尝试。 我喜欢这种感觉。 第二个感受是程序是调试出来的。 有的时候语法上根本没有错误,但随便做一些看似无所谓的改动,比如输出时多加一个空格,或是将程序再打开一下结果调试的时候就好用了。 太神奇了,可能其中的原由永远也不会有人知道。 我认为我的程序还是很完整的,全部完成了题目中所要求的项目。 同时为了界面的友好,对菜单和输出的格式作了必要的调整。 在要求的功能基础上增加了“显示所有课程信息”、“删除课程信息”、“显示选修信息”的功能。 同时还对选修时的数据按照学生的学号进行了排序,使程序更加的人性化。 感谢老师和同学在编程中给予我的帮助,我在今后的编程中会更加努力,使我的编程能力有更大的提高。 五、参考文献 1谭浩强.C程序设计.北京: 清华大学出版社,2005 六、源程序 #include #include #include #include #defineN20 structlesson//课程 {charnum[20];//课程编号 charname[10];//课程名称 floathour;//课时 floatpoint;//学分 }; structchoice//学生选课 {charnumstu[20];//学生学号 charnumles[20];//课程编号 charname[20];//课程名 }; voidmenu();//菜单 voidreads(structlessonles[N],int*n);//读取文件中的信息 voidshow();//显示所有选修课信息 voidadd();//输入课程信息 voiddel();//删除课程信息 voidplus();//添加课程信息 voidselect();//选修一门课程 voidshowresult();//显示选课情况 voidmain() { intn; while (1) { menu(); printf("\n请输入您要选择的操作序号,按回车键确认: "); scanf("%d",&n); switch(n) {case1: add();break;//输入课程信息 case2: show();break;//显示所有选修课信息 case3: plus();break;//添加课程信息 case4: del();break;//删除课程信息 case5: select();break;//选修一门课程 case6: showresult();break;//显示选课情况 case7: exit(0);//退出 default: printf("\n输入错误,请输入列表中存在的序号! \n\n"); } } } voidmenu() {printf("********%%%%%%%%*****************%%%%%%%%%*******\n"); printf("班级成绩管理系统\n"); printf("********%%%%%%%%*****************%%%%%%%%%*******\n"); printf("\n1输入课程信息"); printf("\n2显示课程信息"); printf("\n3添加课程信息"); printf("\n4删除课程信息"); printf("\n5选修一门课程"); printf("\n6显示选课情况"); printf("\n7退出"); } voidreads(structlessonles[N],int*n)/*从文件中读取信息*/ { FILE*fp; inti=0; if((fp=fopen("d: \\lessons.txt","r"))==NULL) {printf("文件打开失败! \n"); return; } else { for(i=0;! feof(fp);i++) fscanf(fp,"%s%s%f%f",les[i].num,les[i].name,&les[i].hour,&les[i].point); } *n=i; fclose(fp); } voidadd()/*输入选修课信息*/ {FILE*fp; intn,i,j; structlessonles[N],les1; if((fp=fopen("d: \\lessons.txt","w"))! =NULL)/*新建选修课文件并添加信息*/ { printf("请问您想添加几门课程,按回车键确认: "); scanf("%d",&n); for(i=1;i<=n;i++) { printf("\n请输入第%d个选修课程的编号、课程名、学时和学分,用空格分开,并按回车键确认: \n",i); scanf("%s%s%f%f",&les[i-1].num,&les[i-1].name,&les[i-1].hour,&les[i-1].point); } for(j=0;j {for(i=0;i if(strcmp(les[i].num,les[i+1].num)>0) {les1=les[i];les[i]=les[i+1];les[i+1]=les1;} } for(i=0;i fprintf(fp,"\n%s%s%f%f",les[i].num,les[i].name,les[i].hour,les[i].point);/*课程信息写入文件*/ } fclose(fp); } voidshow()/*显示所有选修课信息*/ {structlessonles[N]; inti,n; reads(les,&n);/*从文件中读出所有选修课信息*/ printf("*****************所有的选修课信息如下*****************"); printf("\n序号课程编号选修课名称课时学分"); for(i=0;i printf("\n%3d%5s%5s%8.1f%8.1f\n",i+1,les[i].num,les[i].name,les[i].hour,les[i].point); printf("请按任意键继续\n"); getch(); } voidplus()/*添加课程*/ { structlessonles[N]; structlessonles1; FILE*fp; intn,i,j; reads(les,&n); printf("\n请输入要添加的选修课程的编号、课程名、学时和学分,用空格分开,并按回车键确认: \n"); scanf("%s%s%f%f",&les1.num,&les1.name,&les1.hour,&les1.point); for(i=0;i if(strcmp(les1.num,les[i].num)==0)break; if(i>=n) { if(strcmp(les[0].num,les1.num)>0) { for(i=n;i>0;i--) les[i]=les[i-1]; les[0]=les1; if((fp=fopen("d: \\lessons.txt","w"))! =NULL)/*新建选修课文件并添加信息*/ { for(i=0;i<=n;i++) fprintf(fp,"\n%s%s%f%f",les[i].num,les[i].name,les[i].hour,les[i].point);/*课程信息写入文件*/ } } elseif(strcmp(les1.num,les[n-1].num)>0) {les[n]=les1; if((fp=fopen("d: \\lessons.txt","w"))! =NULL)/*新建选修课文件并添加信息*/ { for(i=0;i<=n;i++) fprintf(fp,"\n%s%s%f%f",les[i].num,les[i].name,les[i].hour,les[i].point);/*课程信息写入文件*/ } } else {for(i=0;i if(strcmp(les1.num,les[i].num)>0&&strcmp(les1.num,les[i+1].num)<0) { for(j=n;j>i+1;j--) les[j]=les[j-1]; les[j]=les1; if((fp=fopen("d: \\lessons.txt","w"))! =NULL)/*新建选修课文件并添加信息*/ { for(i=0;i<=n;i++) fprintf(fp,"\n%s%s%f%f",les[i].num,les[i].name,les[i].hour,les[i].point);/*课程信息写入文件*/ } } } fclose(fp); } else { printf("该课程已存在\n"); return; } } voiddel()/*删除选修课程信息函数*/ {structlessonles[N]; charnumber[20]; FILE*fp; intn,i,j; reads(les,&n); printf("\n请输入要删除信息的课程编号,按回车键确认: "); getchar(); scanf("%s",number); for(i=0;i if(strcmp(number,les[i].num)==0)break; if(i>=n) {printf("没有找到该课程信息! \n"); return; } else {for(j=i+1;j les[j-1]=les[j]; } if((fp=fopen("d: \\lessons.txt","w"))==NULL)/*更新文件*/ {printf("文件打开失败! "); return; } else { for(i=0;i fprintf(fp,"\n%s%s%f%f",les[i].num,les[i].name,les[i].hour,les[i].point); } fclose(fp); printf("删除成功! \n"); } voidselect()/*选择一门课程*/ { structlessonles[N]; structchoicecho; FILE*fp; intn,i,m=1; reads(les,&n); if((fp=fopen("d: \\SelectInfo.txt","a"))! =NULL)/*新建学生选课文件并添加信息*/ while(m) { print
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 70 学生 选修 课程 系统
![提示](https://static.bdocx.com/images/bang_tan.gif)