c语言课设报告_第1页
c语言课设报告_第2页
c语言课设报告_第3页
c语言课设报告_第4页
c语言课设报告_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、沈 阳 航 空 工 业 学 院 课程设计学 号 200704033070 班 级 7403302 姓 名 徐航 指导教师 王 晓 岩 2009 年 3 月 1 日沈阳航空工业学院课程设计任务书院系:航空宇航工程学院 专业:飞行器设计与工程 班级:7403302学号:200704033070 题目:学生选修课程系统一、课程设计时间2009年2月24日至2008年2月30日,共计1周,20学时。二、课程设计内容用c语言编写软件完成以下任务:(1) 录入课程信息(课程信息包括课程编号、课程名、学时和学分),并保存在lessons.txt文件中,课程按课程编号有序。(2)添加课程信息:添加前首先查找该

2、门课是否存在,若不存在则按照课程编号大小插入到适当位置。(3)选修一门课程:需要给出学号和课程编号,如果课程编号不存在则重新输入,直到输入正确为止,并将学号和相应的课程编号存入selectinfo.txt文件中。(4)显示出所有学生的选课情况。三、课程设计要求1. 程序质量:² 贯彻结构化的程序设计思想。² 用户界面友好,功能明确,操作方便;可以加以其它功能或修饰。² 用户界面中的菜单至少应包括“输入课程信息”、“添加课程信息”、“选课及显示”、“退出”4项。² 代码应适当缩进,并给出必要的注释,以增强程序的可读性。2. 课程设计说明书:课程结束后,上交

3、课程设计说明书和源程序。课程设计说明书的格式和内容参见提供的模板。四、指导教师和学生签字指导教师:_ 学生签名:_五、说明书成绩六、教师评语沈 阳 航 院 设 计 用 纸目录一、需求分析1二、程序流程图2三、核心技术的实现说明及相应程序段6四、课设总结11五、参考文献11六、源程序1226一、需求分析经过对程序设计题目的分析可知,整个程序的设计实现大致分为六个模块,其中每一个模块对应一个函数,它们的功能分别是:输入课程信息函数,添加课程信息函数,选修一门课程函数,显示选课情况函数,显示课程信息函数以及删除课程信息函数。在这些函数当中,前四个函数的实现严格按照题目的要求,而后面的两个函数属于附加

4、功能。1、输入课程信息函数 主要实现程序最初运行时课程数据的录入功能(课程信息包括课程编号、课程名、学时和学分),并且课程按课程编号有序;2、添加课程信息函数 实现的功能是第一次输入后的运行中课程数据的追加功能,追加的信息按编号顺序存入;3、选修一门课程函数 按照题目的具体要求实现的是给出学号和课程编号,如果课程编号不存在则重新输入,直到输入正确为止。若输入正确则与相应的课程名一起存入文件中;4、显示选课情况函数 将选课情况显示在屏幕上,数据按学生学号有序;5、显示课程信息函数 实现的是显示所有存入的课程信息;6、删除课程信息函数 可以将某个课程信息删除。除上面介绍的功能之外,程序还具有退出功

5、能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。每一个学生记录都包含课程编号、课程名、学时和学分四项信息,在程序当中,将课程记录类型定义为结构体类型,添加以及追加的学生信息直接写入d盘的lessons.txt文件中,同时选课信息也定义为结构体类型,存储在d盘的selectinfo.txt文件中。其它函数每次对课程记录和选课记录的访问,其数据来源都是lessons.txt和selectinfo.txt文件,这样做不但可以保证数据的一致性,而且可以对数据进行永久保存,保证每次运行程序都可以采用原来的数据。二、程序流程图1、程序总体结构图图1程序总体结构图2、具体功能框图(

6、1)添加学生数据函数add图2 添加学生数据函数(2)读取课程数据reads图3读取课程数据(3)删除学生记录函数delreads(stu,&n);循环变量i=0; 输入待删除的学生学号number假i+当i<n-1时stui与number相等?真break;输出该学生记录不存在!记录写回文件i+关闭文件return;当i<=n-2显示打开文件失败!i=0写方式打开student.dat不成功?假真数租元素依次前移 j+当j< ni>=n?真假j=i+1(4)按总分排序函数sort(4)排序函数sort图4删除学生记录函数(4)按总分排序函数sort图5总分排序

7、函数三、核心技术的实现说明及相应程序段本程序主要由六个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其它函数来实现要求的所有功能。在这些函数当中,添加数据函数、删除数据函数和排序函数是程序中较为核心的部分,下面分别进行说明。1、添加数据函数 添加数据分为两种情况,其一是在学生文件(student.dat)不存在的情况下,首先由程序创建一个新文件,并将录入的学生信息写入该文件当中;其二是在学生文件(student.dat)已经存在的情况下,此时文件要以读写方式或追加的方式打开,这样才可以保证以前已经存在的数据不丢失。具体的程序段如下:if(fp=fopen("e:student

8、.dat","rb+")!=null) /*读写方式打开文件*/ j=getw(fp); rewind(fp); /*文件位置指针返回文件开头*/ printf("请输入要添加的学生数量,按回车键确认:"); scanf("%d",&n); putw(j+n,fp); fseek(fp,0l,2); for(i=1;i<=n;i+) printf("n请输入第%d个学生的学号、姓名,并按回车键确认:n",i); scanf("%s%s",stu.num,)

9、; printf("n请输入第%d个学生的三门成绩,并按回车键确认:n",i); scanf("%f%f%f",&stu.english,&puter,&stu.math); fwrite(&stu,sizeof(struct student),1,fp); else /*文件不存在时,新建一个文件,并将数据写入该文件*/ if(fp=fopen("e:student.dat","wb")!=null) printf("请输入要添加的学生数量,按回车键确认:");

10、 scanf("%d",&n); putw(n,fp); for(i=1;i<=n;i+) printf("n请输入第%d个学生的学号、姓名,并按回车键确认:n",i); scanf("%s%s",stu.num,); printf("n请输入第%d个学生的三门成绩,并按回车键确认:n",i); scanf("%f%f%f",&stu.english,&puter,&stu.math); fwrite(&stu,sizeof(stru

11、ct student),1,fp); fclose(fp);2、删除数据函数该函数的核心内容是删除算法以及最终对源文件的更新。该函数执行时,首先调用reads函数将文件中的学生信息读入数组当中,并由用户输入待删除学生的学号,而后按照该学号进行查找,如果文件中存在该学生的数据,则采用删除算法删除,否则输出学生信息不存在的提示信息。对学生信息的具体删除算法是在结构体数组中实现的,当学生的信息被找到后,位于数组中该学生后面的学生记录依次向前移动一个元素的位置,这些操作完成后,要删除的学生信息就被后面的数组元素覆盖掉了,也就实现了删除。在数组中删除学生信息后,还要将更改后的信息重新写回文件当中,以保证

12、数据的一致性。具体程序段如下:void del() /*信息删除函数*/struct student stun; char number20; file *fp; int n,i,j; reads(stu,&n); printf("n请输入要删除信息的学生学号,按回车键确认:"); scanf("%s",number); for(i=0;i<n;i+) /*查找待删除的学生记录*/ if(strcmp(number,stui.num)=0) break; if(i>=n) printf("没有找到该学生信息!n")

13、; return; elsefor(j=i+1;j<n;j+) /*左移,覆盖待删除的学生记录*/ strcpy(stuj-1.num,stuj.num); strcpy(,); stuj-1.english=stuj.english; puter=puter; stuj-1.math=stuj.math; if(fp=fopen("e:student.dat","wb")=null) printf("文件打开失败!"); return; else /*

14、重新写回文件当中*/ putw(n-1,fp); for(i=0;i<n-1;i+) fwrite(&stui,sizeof(struct student),1,fp); fclose(fp); printf("删除成功!n");3、总分排序函数对于总分的排序采用的排序算法是冒泡法排序,其中总分的求得是在排序的过程中实现的,这部分程序仍然调用了reads函数,整个排序过程在结构体数组stu中实现,由于排序算法涉及到两个数组元素的信息交换,因此还需要定义一个中间变量来协助。排序函数使学生数据的排列顺序发生了变化,因此也需要队员文件进行更新,此外,对于学生排序后名

15、次的确定,仅在结果输出时予以显示,并未将名次信息写入源文件。具体的程序段如下:void sort()/*排序函数*/ file *fp; struct student stun,temp; int i,j,n; reads(stu,&n); for(i=0;i<n-1;i+) /*采用冒泡法对总分进行排序*/ for(j=0;j<n-1-i;j+) if(stuj.english+puter+stuj.math<stuj+1.english+stuj+1.computer+stuj+1.math) strcpy(temp.num,stuj.num);

16、strcpy(,); temp.english=stuj.english; puter=puter; temp.math=stuj.math; strcpy(stuj.num,stuj+1.num); strcpy(,stuj+1.name); stuj.english=stuj+1.english; puter=stuj+1.computer; stuj.math=stuj+1.math; strcpy(stuj+1.num,temp.num); strcpy(stuj+1.name,);

17、 stuj+1.english=temp.english; stuj+1.computer=puter; stuj+1.math=temp.math; if(fp=fopen("e:student.dat","wb")=null) /*更新文件*/ printf("打开文件失败!"); return; putw(n,fp); j=1; for(i=0;i<n;i+) fwrite(&stui,sizeof(struct student),1,fp);if(stui.english+puter+stui.m

18、ath=stui+1.english+stui+1.computer+stui+1.math) printf("%3d%5s%5s%8.2f%8.2f%8.2f%9.2fn",j,stui.num,,stui.english,puter,stui.math,stui.english+puter+stui.math);else printf("%3d%5s%5s%8.2f%8.2f%8.2f%9.2fn",j+,stui.num,,stui.english,puter,st

19、ui.math,stui.english+puter+stui.math); fclose(fp);getch();四、课设总结写出在课程设计过程中的收获和体会,并说明程序的完成情况,如果程序未能全部实现请分析其中的原因。五、参考文献1 谭浩强c程序设计北京:清华大学出版社,2005六、源程序#include<stdio.h>#include<stdlib.h>/其中定义了system()函数。#include<conio.h>/其中定义了getch()函数。#include<string.h>/定义了字符串控制函数#define

20、 n 20struct lesson/课程char num20;/课程编号 char name10;/课程名称 float hour;/课时 float point;/学分;struct choice/学生选课char numstu20;/学生学号 char numles20;/课程编号 char name20;/课程名;void menu();/菜单void reads(struct lesson lesn,int *n);/读取文件中的信息void show();/显示所有选修课信息void add();/输入课程信息void del();/删除课程信息void plus();/添加课程信

21、息void select();/选修一门课程void showresult();/显示选课情况void main() int n; while(1) menu();printf("n 请输入您要选择的操作序号,按回车键确认:"); scanf("%d",&n);switch(n)case 1: add();break;/输入课程信息 case 2: show();break;/显示所有选修课信息 case 3: plus();break;/添加课程信息 case 4: del();break;/删除课程信息 case 5: select();br

22、eak;/选修一门课程 case 6: showresult();break;/显示选课情况 case 7: exit(0);/退出 default: printf("n 输入错误,请输入列表中存在的序号!nn "); void menu()printf(" *%* *%*n"); printf(" 班级成绩管理系统n"); printf(" *%* *%*n"); printf("n 1 输入课程信息"); printf("n 2 显示课程信息"); printf(&quo

23、t;n 3 添加课程信息"); printf("n 4 删除课程信息"); printf("n 5 选修一门课程"); printf("n 6 显示选课情况"); printf("n 7 退出");void reads(struct lesson lesn,int *n)/*从文件中读取信息*/ file *fp; int i=0; if(fp=fopen("d:lessons.txt","r")=null) printf("文件打开失败!n")

24、; return; else for(i=0;!feof(fp);i+) fscanf(fp,"%s%s%f%f",lesi.num,,&lesi.hour,&lesi.point); *n=i; fclose(fp);void add()/*输入选修课信息*/file *fp; int n,i,j; struct lesson lesn,les1; if(fp=fopen("d:lessons.txt","w")!=null)/*新建选修课文件并添加信息*/ printf("请问您想添加几

25、门课程,按回车键确认:"); scanf("%d",&n); for(i=1;i<=n;i+) printf("n请输入第%d个选修课程的编号、课程名、学时和学分,用空格分开,并按回车键确认:n",i); scanf("%s%s%f%f",&lesi-1.num,&,&lesi-1.hour,&lesi-1.point); for(j=0;j<n;j+) for(i=0;i<n-j;i+) if(strcmp(lesi.num,lesi+1.nu

26、m)>0)les1=lesi;lesi=lesi+1;lesi+1=les1; for(i=0;i<n;i+) fprintf(fp,"n%s %s %f %f",lesi.num,,lesi.hour,lesi.point);/*课程信息写入文件*/ fclose(fp);void show()/*显示所有选修课信息*/struct lesson lesn; int i,n; reads(les,&n);/*从文件中读出所有选修课信息*/ printf(" *所有的选修课信息如下*"); printf("

27、n 序号 课程编号 选修课名称 课时 学分"); for(i=0;i<n;i+) printf("n%3d %5s %5s%8.1f%8.1fn",i+1,lesi.num,,lesi.hour,lesi.point); printf(" 请按任意键继续 n"); getch();void plus()/*添加课程*/ struct lesson lesn; struct lesson les1; file *fp; int n,i,j; reads(les,&n); printf("n请输入要添加的选

28、修课程的编号、课程名、学时和学分,用空格分开,并按回车键确认:n"); scanf("%s%s%f%f",&les1.num,&,&les1.hour,&les1.point); for(i=0;i<n;i+) if(strcmp(les1.num,lesi.num)=0) break;if(i>=n) if(strcmp(les0.num,les1.num)>0) for(i=n;i>0;i-) lesi=lesi-1; les0=les1; if(fp=fopen("d:les

29、sons.txt","w")!=null)/*新建选修课文件并添加信息*/ for(i=0;i<=n;i+) fprintf(fp,"n%s %s %f %f",lesi.num,,lesi.hour,lesi.point);/*课程信息写入文件*/ else if(strcmp(les1.num,lesn-1.num)>0) lesn=les1; if(fp=fopen("d:lessons.txt","w")!=null)/*新建选修课文件并添加信息*/ for(i=0;

30、i<=n;i+) fprintf(fp,"n%s %s %f %f",lesi.num,,lesi.hour,lesi.point);/*课程信息写入文件*/ else for(i=0;i<n;i+) if(strcmp(les1.num,lesi.num)>0&&strcmp(les1.num,lesi+1.num)<0) for(j=n;j>i+1;j-) lesj=lesj-1; lesj=les1; if(fp=fopen("d:lessons.txt","w")

31、!=null)/*新建选修课文件并添加信息*/ for(i=0;i<=n;i+) fprintf(fp,"n%s %s %f %f",lesi.num,,lesi.hour,lesi.point);/*课程信息写入文件*/ fclose(fp); else printf(" 该课程已存在n"); return; void del() /*删除选修课程信息函数*/struct lesson lesn; char number20; file *fp; int n,i,j; reads(les,&n); printf(&quo

32、t;n请输入要删除信息的课程编号,按回车键确认:"); getchar(); scanf("%s",number); for(i=0;i<n;i+) if(strcmp(number,lesi.num)=0) break; if(i>=n) printf("没有找到该课程信息!n"); return; elsefor(j=i+1;j<n;j+) lesj-1=lesj; if(fp=fopen("d:lessons.txt","w")=null)/*更新文件*/ printf("

33、;文件打开失败!"); return; else for(i=0;i<n-1;i+) fprintf(fp,"n%s %s %f %f",lesi.num,,lesi.hour,lesi.point); fclose(fp); printf("删除成功!n");void select() /*选择一门课程*/ struct lesson lesn; struct choice cho; file *fp; int n,i,m=1; reads(les,&n); if(fp=fopen("d:select

34、info.txt","a")!=null)/*新建学生选课文件并添加信息*/ while(m) printf("n请输入您的学号和选修的课程编号,用空格分开,并按回车键确认:n"); scanf("%s%s",&cho.numstu,&cho.numles);for(i=0;i<n;i+)if(strcmp(cho.numles,lesi.num)=0)break; if(i<n) fprintf(fp,"%s %s %sn",cho.numstu,cho.numles,les

35、); printf(" 选择成功!n");m=0; else printf("n 课程编号不正确!请进重新输入!n"); fclose(fp);void showresult() /*显示选课情况*/ struct choice chon; struct choice cho1; file *fp; int i=0,n,re,j; if(fp=fopen("d:selectinfo.txt","r")=null) printf("n 文件打开失败!nn"); return; else

36、 for(i=0;i+)re=fscanf(fp,"%s%s%s",&choi.numstu,&choi.numles,&); if(re=eof)break; n=i; for(j=0;j<n;j+) for(i=0;i<n-j;i+) if(strcmp(choi.numstu,choi+1.numstu)>0)cho1=choi;choi=choi+1;choi+1=cho1; printf(" 学生学号 课程编号 课程名"); if(fp=fopen("d:selectinfo

37、.txt","w")!=null)/*更新信息*/ for(i=0;i<n;i+) fprintf(fp,"%s %s %sn",choi.numstu,choi.numles,); fclose(fp); for(i=0;i<n;i+) printf("n %s %s %sn",choi.numstu,choi.numles,);#include<stdio.h>#include<stdlib.h>#include<conio.h>#inc

38、lude<string.h>#define n 20struct studentchar num20; char name10; float english; float computer; float math;void menu();void reads(struct student stun,int *n);void add();void del();void sort();void query();void change();void show();void main() int n; while(1) menu(); printf("n请输入您要选择的操作序号,

39、按回车键确认:"); scanf("%d",&n); switch(n) case 1: add();break; case 2: show();break; case 3: del();break; case 4: change();break; case 5: sort();break; case 6: query();break; case 7: exit(0); default: printf("输入错误,请输入列表中存在的序号!n "); void menu() printf(" * 班级成绩管理系统* "

40、); printf("n 1 添加学生数据"); printf("n 2 显示学生数据"); printf("n 3 删除学生数据"); printf("n 4 更改学生数据"); printf("n 5 总成绩排序"); printf("n 6 成绩查询"); printf("n 7 退出");void reads(struct student stun,int *n) file *fp; int i=0; if(fp=fopen("d:stu

41、dent.txt","r")=null) printf("文件打开失败!n "); return; else /*n=getw(fp); for(i=0;!feof(fp);i+) fscanf(fp,"%s%s%f%f%f",stui.num,,&stui.english,&puter,&stui.math); *n=i; fclose(fp);void add()/*添加学生信息函数*/file *fp; int n,i; struct student stu;

42、if(fp=fopen("d:student.txt","r+")!=null) printf("请输入要添加的学生数量,按回车键确认:"); scanf("%d",&n); fseek(fp,0l,2); for(i=1;i<=n;i+) printf("n请输入第%d个学生的学号、姓名,用空格分开,并按回车键确认:n",i); scanf("%s%s",stu.num,); printf("n请输入第%d个学生的英语、计算机和数学三

43、门成绩,用空格分开,并按回车键确认:n",i); scanf("%f%f%f",&stu.english,&puter,&stu.math); fprintf(fp,"n%s %s %f %f %f",stu.num,,stu.english,puter,stu.math); else if(fp=fopen("d:student.txt","w")!=null) printf("请输入要添加的学生数量,按回车键确认:"); scanf(&quo

44、t;%d",&n); for(i=1;i<=n;i+) printf("n请输入第%d个学生的学号、姓名,用空格分开,并按回车键确认:n",i); scanf("%s%s",stu.num,); printf("n请输入第%d个学生的英语、计算机和数学三门成绩,用空格分开,并按回车键确认:n",i); scanf("%f%f%f",&stu.english,&puter,&stu.math);fprintf(fp,"n%s %s %f %f

45、%f",stu.num,,stu.english,puter,stu.math); fclose(fp);void show()/*显示所有学生信息函数*/struct student stun; int i,n; reads(stu,&n);/*从文件中读出学生信息*/ printf(" *所有学生信息如下*"); for(i=0;i<n;i+) printf("n%3d%5s%5s%8.2f%8.2f%8.2fn",i+1,stui.num,,stui.english,pute

46、r,stui.math); getch();void del() /*删除学生信息函数*/struct student stun; char number20; file *fp; int n,i,j; reads(stu,&n); printf("n请输入要删除信息的学生学号,按回车键确认:"); getchar(); scanf("%s",number); for(i=0;i<n;i+) if(strcmp(number,stui.num)=0) break; if(i>=n) printf("没有找到该学生信息n&qu

47、ot;); return; elsefor(j=i+1;j<n;j+) stuj-1=stuj; if(fp=fopen("d:student.txt","w")=null)/*更新文件*/ printf("文件打开失败n"); return; else for(i=0;i<n-1;i+) fprintf(fp,"n%s %s %f %f %f",stui.num,,stui.english,puter,stui.math); fclose(fp); printf(&q

48、uot;删除成功n");void change()struct student stun,temp; int n,i; file *fp; printf("n请输入要更改信息的学生学号,按回车键确认:"); scanf("%s",temp.num); reads(stu,&n); for(i=0;i<n;i+) if(strcmp(temp.num,stui.num)=0) break; if(i>=n) printf("无此学生信息n"); return; printf("n请输入更改后的学生姓名,英语、计算机、数学三门成绩,用空格分开:n"); scanf("%s%f%f%f",,&temp.english,&am

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论