C语言课程设计报告--学生选修课程管理系统(共25页).doc
精选优质文档-倾情为你奉上目 录 1程序目标及功能- 11.1课题背景-21.2系统功能 -21.3设计要求 -32程序功能模块组成及流程图 -32.1系统功能模块-52.2各模块流程图-63程序主要数据结构及函数列表 -83.1 程序中使用的数据结构-83.2 函数列表-104程序代码及运行结果 -125总结与体会 -15 专心-专注-专业1、 程序目标及功能1.1、课题背景当今社会是一个信息时代,计算机技术发展迅速,同时信息的自动处理以及网络式的信息交互方式越来越被人们认可和运用,让计算机来管理学生的信息是现在各个高校都在积极进行的工作之一,也是高校教学管理工作的重要内容之一。网上选课与传统的选课方式相比更节约资源,同时,随着学生选课自主权的增加,网上选课有效的避免了许多不良现象,使教学更加透明。1.2、系统功能课程信息录入。建立课程信息链表,由键盘输入课程信息。课程信息输出。输出所有课程信息。查询课程。按课程编号、课程名称、学分、按课程性质、开课学期等查询(至少实现1种)。学生选修课程。输入学生学号和课程编号,形成一条选课信息,保存在“选修信息文件”里。查询学生选修的课程。输入学生学号,输出该生已选修的课程编号和课程名称。保存课程信息到磁盘文件。建立一个磁盘文件,把所建立的课程表写入文件。从磁盘文件中读出课程信息。1.3、设计要求假定有n门课程,每门课程有课程编号、课程名称、课程性质(专业选修课、公选课)、总学时、总学分、理论学时、实验学时、开课学期、已选修本课程的学生人数等信息;每门课最多允许60个学生选修。选修信息文件,用来保存每个学生选修课程的信息,每条记录包括:学生的学号、所选修的课程编号和课程名称。系统以菜单方式工作(程序主界面包括程序名称及编程者学号、姓名、班级;同时要求输入功能号码,选择进入功能模块程序)。用函数分别实现动态链表的建立、动态链表输出等功能。界面友好,程序中加入必要的注释。函数功能要划分好(结构化程序设计);函数要求使用指针作形参。学生选修一门课后,要同时更新课程信息和选修信息文件。2、 程序功能模块组成及流程图2.1系统功能模块根据设计要求分为8个模块,分别是:1: 创建课程信息:课程信息的录入,建立课程信息链表,有键盘输入课程信息。2: 课程信息输出:输入所有课程信息。3: 查询课程信息:按课程编号、课程名称、课程性质、学分、开课学期等查询(此程序按课程编号实现)。4: 学生选修课程:输入学生学号和课程编号,形成一条选课信息,保存在“选修信息文件”里。5: 查询学生选修课程:输入学生学号,输入该省已选修的课程编号和课程名称。6: 保存课程信息到磁盘:建立磁盘文件,把所建立的课程表写入文件。7: 从磁盘文件中读出课程信息:从磁盘文件中读出课程信息并输出,显示主界面。8: 退出:结束程序,退出系统。2.2各模块流程图课程信息录入功能模块课程信息输出课程信息输出按学号查询选课,保存信息信息的保存与读出选课信息管理系统选择模块创建课程信息docp1=(struct stu*)malloc(sizeof(struct stu);if(i=1) chead=cp2=cp1;else cp2->next=cp1;scanf("%d %s",&cp1->num,&cp1->name);scanf("%s %d %d %d",&cp1->quale,&cp1->time,&cp1->credit,&cp1->thtime);scanf("%d %d %d",&cp1->extime,&cp1->term,&cp1->alnum);cp2=cp1;fflush(stdin); /刷新scanf()函数缓冲,防止自动循环i+; while(am>=i);cp2->next=NULL;学生选课int snum;struct stu*head,*p1;p1=p;printf("请输入学生学号:");scanf("%d",&snum);printf("输入课程编号:");scanf("%d",&num);doif (p1->num=num)FILE*fp;fp=fopen("选修信息文件.txt","w");fprintf(fp,"学生学号 课程编号 名称 性质 总学时 总学分 理论学时 实验学时 开课学期 已修本课的人数n");fprintf(fp,"%dt%dt%st%st%dt%dt%dt%dt%dt%d",snum,p1->num,p1->name,p1->quale,p1->time,p1->credit,p1->thtime,p1->extime,p1->term,p1->alnum);fclose(fp);printf("已保存至“选修信息文件.txt”n");else p1=p1->next;while(p1=NULL);3、程序主要数据结构及函数列表3.1 程序中使用的数据结构链表的使用struct stu /声明结构体类型struct studentint num; /课程编号char name20; /课程名称char quale10; /课程性质int time; /总学时int credit; /总学分int thtime; /理论学时int extime; /实验学时int term; /开课学期int alnum; /已选本课程的学生人数struct stu*next;3.2 函数列表struct stu * creat(int am); / 创建链表,录入课程信息 void output(struct stu *p); /声明输入课程信息的函数,按课程编号查询void inquire(struct stu*p,int n); /声明查询课程的函数void stu_classes(struct stu*p,int num); /声明保存文件的的函数void inquire_stu(struct stu*p,int numb); /查询学生选课信息 void save_inf(struct stu*p); /声明保存课程信息函数void read_inf(struct stu*p); /声明读出课程信息的函数void reset(); /声明清除界面函数4、 程序代码及运行结果程序代码:#include<stdio.h>#include<stdlib.h>#include<conio.h>#define NULL 0#define N 2 /定义共5门课程struct stu /声明结构体类型struct studentint num; /课程编号char name20; /课程名称char quale10; /课程性质int time; /总学时int credit; /总学分int thtime; /理论学时int extime; /实验学时int term; /开课学期int alnum; /已选本课程的学生人数struct stu*next;int main(void)struct stu * creat(int am); / 创建链表,录入课程信息 void output(struct stu *p); /声明输入课程信息的函数,按课程编号查询void inquire(struct stu*p,int n); /声明查询课程的函数void stu_classes(struct stu*p,int num); /声明保存文件的的函数void inquire_stu(struct stu*p,int numb); /查询学生选课信息 void save_inf(struct stu*p); /声明保存课程信息函数void read_inf(struct stu*p); /声明读出课程信息的函数void reset(); /声明清除界面函数struct stu *head;int M,n,num,numb,fail;loop:printf("n");printf("*学生选修课程系统*n");printf(" 学号:* 姓名:* 班级:* n" );printf("n");printf("*n");printf("*tt1: 创建课程信息表 *n");printf("*tt2: 课程信息输出 *n");printf("*tt3: 查询课程信息 *n");printf("*tt4: 学生选修课程 *n");printf("*tt5: 查询学生选修课程 *n");printf("*tt6: 保存课程信息到磁盘 *n");printf("*tt7: 从磁盘文件中读出课程信息 *n");printf("*tt8: 退出 *n"); /菜单形式的主界面printf("*n");printf("nntt请输入功能号 1-8:"); /提示输入功能号scanf("%d",&M); if (M=1)if (fail=1) /判断是否创建列表printf("已经创建列表,请选择其他功能!n");goto loop; /返回初始界面else head=creat(N); /使用列表,录入信息fail=1;/reset(); /清除界面else if (M=2)if(fail=1) /判断是否创建列表output(head);reset(); /输入信息,清除界面else printf("没有数据,请先录入信息!n");goto loop; /返回初始界面else if (M=3)if (fail=1) /判断是否创建列表inquire(head,n);reset(); /查询信息函数,清除界面else printf("没有数据,请先录入信息!n");goto loop; /返回初始界面else if (M=4)if(fail=1)stu_classes(head,num);reset(); /形成信息并保存,清除界面else printf("没有数据,请先录入信息!n");goto loop; /返回初始界面else if (M=5)if(fail=1)inquire_stu(head,numb); /查询信息fail=2;reset(); /清除界面else printf("没有数据,请先录入信息!n");goto loop; /返回初始界面else if (M=6)if (fail=2)save_inf(head); /保存文件fail=3;reset(); /清除界面else printf("没有选课,请先选课!n");goto loop; /返回初始界面else if (M=7)if (fail=1|fail=2|fail=3)read_inf(head);reset();else printf("没有数据,请先录入信息!n");goto loop; /返回初始界面elseif (M=8)exit(0); /退出程序else printf("输入错误n"); /错误提示goto loop; /转至功能号的输入return 0;struct stu * creat(int am) /创建链表int i=1;am=N;struct stu *cp1,*cp2,*chead;printf("t请输入以下信息:(名称和性质请输入小写字母,其余均为数字)n");printf("课程的编号 名称 性质 总学时 总学分 理论学时 实验学时 开课学期 已修本课的人数:");printf("n");docp1=(struct stu*)malloc(sizeof(struct stu);if(i=1) chead=cp2=cp1;else cp2->next=cp1;scanf("%d %s",&cp1->num,&cp1->name);scanf("%s %d %d %d",&cp1->quale,&cp1->time,&cp1->credit,&cp1->thtime);scanf("%d %d %d",&cp1->extime,&cp1->term,&cp1->alnum);cp2=cp1;fflush(stdin); /刷新scanf()函数缓冲,防止自动循环i+; while(am>=i); cp2->next=NULL;return (chead);void output(struct stu *p) /定义输出信息函数int i;struct stu *p1;p1=p;printf("编号 名称 性质 总学时 总学分 理论学时 实验学时 开课学期 已修本课的人数n");for (i=1;p1!=NULL;i+)printf("%d %s %st%dt%dt%dt%dt%dt%d",p1->num,p1->name,p1->quale,p1->time,p1->credit,p1->thtime,p1->extime,p1->term,p1->alnum);printf("n");p1=p1->next;void inquire(struct stu*p,int n) /定义查询信息函数printf("输入要查询的编号:");scanf("%d",&n);struct stu *p1;p1=p;printf("您所查询的信息是:n");do if (p1->num=n)printf("编号 名称 性质 总学时 总学分 理论学时 实验学时 开课学期 已修本课的人数n");printf("%d %s %st%dt%dt%dt%dt%dt%d",p1->num,p1->name,p1->quale,p1->time,p1->credit,p1->thtime,p1->extime,p1->term,p1->alnum);printf("n");p1=p1->next;else p1=p1->next;while(p1!=NULL);void stu_classes(struct stu*p,int num) /定义学生选课信息的函数,并保存至"选修信息文件.txt"int snum;struct stu*head,*p1;p1=p;printf("请输入学生学号:");scanf("%d",&snum);printf("输入课程编号:");scanf("%d",&num);doif (p1->num=num)FILE*fp;fp=fopen("选修信息文件.txt","w");fprintf(fp,"学生学号 课程编号 名称 性质 总学时 总学分 理论学时 实验学时 开课学期 已修本课的人数n");fprintf(fp,"%dt%dt%st%st%dt%dt%dt%dt%dt%d",snum,p1->num,p1->name,p1->quale,p1->time,p1->credit,p1->thtime,p1->extime,p1->term,p1->alnum);fclose(fp);printf("已保存至“选修信息文件.txt”n");else p1=p1->next;while(p1=NULL);void inquire_stu(struct stu*p,int numb) /定义查询学生信息的函数int snum;printf("请输入学号:");scanf("%d",&snum);struct stu*head,*p1;p1=p;printf("学号 课程编号 课程名称n");printf("%dt%dt%s",snum,p1->num,p1->name);printf("n");void save_inf(struct stu*p) /定义保存课程信息的文件int i;struct stu *p1,*head;p1=p;FILE*fp;fp=fopen("课程信息.txt","w");for (i=0;p1!=NULL;i+)fprintf(fp,"课程编号 名称 性质 总学时 总学分 理论学时 实验学时 开课学期 已修本课的人数n");fprintf(fp,"%dt%st%st%dt%dt%dt%dt%dt%dn",p1->num,p1->name,p1->quale,p1->time,p1->credit,p1->thtime,p1->extime,p1->term,p1->alnum);p1=p1->next;fclose(fp); printf("已保存至“课程信息.txt”n");void read_inf(struct stu*p) /定义读出课程信息的函数int i;struct stu *p1,*head;p1=p;FILE*fp;if (fp=fopen("课程信息.txt","r")=NULL)printf("无法打开文件n");printf("请先建立文件n");for (i=1;p1!=NULL;i+)fread(&p,sizeof(head),1,fp);printf("%d %s %st%dt%dt%dt%dt%dt%dn",p1->num,p1->name,p1->quale,p1->time,p1->credit,p1->thtime,p1->extime,p1->term,p1->alnum);p1=p1->next;fclose(fp);void reset() /定义清楚界面函数printf("按任意键继续");getch();system("CLS");各阶段运行结果:主界面的输出:数据的输入:数据的输出:查询信息 :选课并保存:保存的文件:查询选课信息:保存课程信息:保存的文件:读取以保存的文件:错误提示:5、 总结与体会这次的课程设计实验是对我们进入大学以来学习C语言结果的一次大考验。自己动手,发现问题和解决问题。并发现了许多自己的不足,平时没掌握的知识在实践中暴漏,经过不断的思考,查阅书籍和上网查资料及上机运行,解决了大部分问题,还稍微有些小问题。但是,我相信经过深入的的学习,一定能把它解决好。当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握程序开发技术是十分重要的,而C语言又是最常见,功能最强大的一种高级语言,因此做好C语言课程设计是十分必要的。 我不仅巩固C语言程序设计课程学习的内容,掌握设计的基本方法,强化上机动手能力,还进一步掌握以下了知识:数据类型、循环控制、函数的定义及调用、结构体及指针、文件操作、编译预处理等;通过课程设计,增强了自己动手的能力,有了这次成功的设计,给了我极大的信心,在以后的学习中会更加认真,努力。 通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。