C语言课程设计报告--学生选修课程管理系统 - 范文中心

C语言课程设计报告--学生选修课程管理系统

06/17

目 录

1程序目标及功能--------------------------------------------------------------- 1

1.1课题背景-----------------------------------------------------------------2 1.2系统功能 ---------------------------------------------------------------2 1.3设计要求 ---------------------------------------------------------------3

2程序功能模块组成及流程图 -----------------------------------------------3 2.1系统功能模块-----------------------------------------------------------5 2.2各模块流程图-----------------------------------------------------------6

3程序主要数据结构及函数列表 ---------------------------------------------8

3.1 程序中使用的数据结构----------------------------------------------8 3.2 函数列表--------------------------------------------------------------10

4程序代码及运行结果 -------------------------------------------------------12

5总结与体会 ------------------------------------------------------------------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各模块流程图

选择模块

创建课程信息

do {

cp1=(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); do {

if (p1->num=num) {

FILE*fp;

fp=fopen("选修信息文件.txt","w");

fprintf(fp,"学生学号 课程编号 名称 性质 总学时 总学分 理论学时 实验学时 开课学期 已修本课的人数\n");

fprintf(fp,"%d\t%d\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%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 student {

int num; //课程编号 char name[20]; //课程名称 char quale[10]; //课程性质 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 #include #include #define NULL 0

#define N 2 //定义共5门课程

struct stu //声明结构体类型struct student {

int num; //课程编号 char name[20]; //课程名称

char quale[10]; //课程性质 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("*\t\t※1: 创建课程信息表 *\n"); printf("*\t\t※2: 课程信息输出 *\n"); printf("*\t\t※3: 查询课程信息 *\n"); printf("*\t\t※4: 学生选修课程 *\n"); printf("*\t\t※5: 查询学生选修课程 *\n"); printf("*\t\t※6: 保存课程信息到磁盘 *\n"); printf("*\t\t※7: 从磁盘文件中读出课程信息 *\n");

printf("*\t\t※8: 退出 *\n"); //菜单形式的主界面

printf("************************************************

******\n");

printf("\n\n\t\t请输入功能号 [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; //返回初始界面 }

else

if (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");

do

{

cp1=(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 %s\t%d\t%d\t%d\t%d\t%d\t%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 %s\t%d\t%d\t%d\t%d\t%d\t%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);

do

{

if (p1->num=num)

{

FILE*fp;

fp=fopen("选修信息文件.txt","w");

fprintf(fp,"学生学号 课程编号 名称 性质 总学时 总学分 理论学时 实验学时 开课学期 已修本课的人数\n");

fprintf(fp,"%d\t%d\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%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("%d\t%d\t%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,"%d\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d\n",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 %s\t%d\t%d\t%d\t%d\t%d\t%d\n",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 语言程序设计》课程学习的内容,掌握设计的基本方法,强化上机动手能力,还进一步掌握以下了知识:数据类型、循环控制、函数的定义及调用、结构体及指针、文件操作、编译预处理等;通过课程设计,增强了自己动手的能力,有了这次成功的设计,给了我极大的信心,在以后的学习中会更加认真,努力。

通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。


相关内容

  • [精品]高中课程设置方案
    篇一:高中课程设置方案 陕西省从20XX年秋季开始全面实施普通高中新课程,根据教育部颁布的<基础教育课程改革纲要(试行)><普通高中课程方案(试验)><关于进一步加强普通高中新课程实验工作的指导意见>和陕 ...
  • 微电子科学与工程专业
    微电子科学与工程专业一.培养目标本专业培养德.智.体等方面全面发展,具备微电子科学与工程专业扎实的自然科学基础.系统的专业 知识和较强的实验技能与工程实践能力,能在微电子科学技术领域从事研究.开发.制造和管理等方面工作 的专门人才.二.专业 ...
  • 上海市中外合作办学项目
    上海市中外合作办学项目 (2011)年 度 报 告 书项目名称东华大学与德国劳特林根应用技术大学 合作举办轻化工程专业本科教育项目项目批准书编号 批 准 书 有 效 期至MOE31DE2A20020525O 2011 年 6 月 27 日( ...
  • 20**年1020_电子商务专业剖析报告
    电子商务专业剖析报告 青岛大学管理科学与工程学院电子商务专业是本学院最早设立的专业,2002年开始招生,已有毕业生近千余人,在校生约200人.电子商务专业现有教师11人,教授2人,副教授4人:具有博士学位6人.教师分别于复旦大学.南京大学. ...
  • 宁波大学本科教学培养方案指导性意见
    宁 波 大 学 文 件 宁大政„2010‟101号 宁波大学本科教学培养方案指导性意见 为了进一步深化教育教学改革.适应构建创新人才培养体系与建设服务型教育教学体系的需要,学校决定启动新一轮本科教学培养方案修订工作,现提出如下指导性意见. ...
  • 高中生物课程改革中的主要问题和对策
    高中生物课程改革中的主要问题和对策 人民教育出版社 课程教材研究所 赵占良 普通高中生物课程改革实验已经三年.三年来,实验区不断扩大,各级教育行政部门和教研部门高度重视,广大教师积极转变观念,改进教学方式,积累了许多宝贵经验,也遇到不少问题 ...
  • 统计学专业培养方案
    统计学专业本科培养方案 Statistics 学科门类:理学 专业代码:071201 一.专业培养目标 本专业培养掌握统计学的基本理论.方法及计算机应用技能,具有良好的数学与统计学素养.较强的创新精神和实践能力,能够熟练地运用计算机软件分析 ...
  • 高中语文教材简析
    高中语文教材简析(以人教版教材为例) 一.普通高中课程标准实验教科书介绍 ( 一 ) 指导思想 1. 在义务教育语文学习的基础上 , 进一步全面提高学生的语文素养 , 发挥语文课在育人上的独特优势 , 使学生具有适应未来社会生活所必需的语文 ...
  • 工商管理专业人才培养方案
    工商管理本科专业人才培养方案 一.专业培养目标 本专业培养适应社会主义市场经济需要,德智体美全面发展,具备管理.经济.法律及企业管理方面的综合知识和能力,初步具备职业经理素质,能在企.事业单位及政府部门从事管理工作的高级专门人才. 按专业招 ...
  • 面向应用型人才培养的网络工程专业课程体系探索与实践
    文章编号:1672-5913(2009)19-0134-06 面向应用型人才培养的网络工程专业课程体系探索与实践 郭广军1,羊四清1,戴经国1,龚德良2 (1.湖南人文科技学院 计算机科学技术系,湖南 娄底 417000:2.湘南学院 计算 ...