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

学生选修课管理系统设计C语言版

08/10

CHANGSHAUNIVERSITY OF SCIENCE & TECHNOLOGY

课程设计(论文)

题目:学生选修课管理系统设计

学号:班级: 所在院部:

2013 年 1 月

第1页共22页

学生选修课管理系统设计

学生姓名:江元 学号:[1**********]1 班级:信计11-01班 指导教师:龚红仿

完成日期: 2013

第2页共22页

学生选修课管理系统设计

摘要

C 语言课程设计和现代计算机技术的实际应用相结合,是我们在本阶段学完理论课程之后对自己该方面的能力的一次很好的检验,从开始的算法思路到运行调试后的美观的图形界面以及另人兴奋的可用程序,都是一个很好的学习和锻炼的过程。使我们巩固了原有的理论知识,培养了我们灵活运用和组合集成所学过知识及技能来分析、解决实际问题的能力。使我们体会到自身知识和能力能在实际中的应用和发挥。不但可以激发创新意识,还可以开发创造能力、培养沟通能力。这次学生选修课系统管理设计时间虽然仅有一个星期,但确实使我受益非浅。通过学生选修课系统管理设计我丰富了计算机操作经验,更加深了对C 语言的了解,熟悉了其环境,更增强了对Microsoft Visual C++ 6.0的使用技巧。

C 语言是在国内外广泛使用的一种计算机语言。语言功能丰富、表达能力强、使用灵活方便、既具有高级语言的优点,又具有低级语言的许多特点,适合编写系统软件。同时,我觉得C 语言应该是操作和理论相结合的课程,在不断地编写中去思考,两者是不可分割的。我们在编写一个较大的程序时应该把它分开成几个小程序来看,这样会容易得多。

关键词:学生选修课系统管理;C 语言课程设计;计算机技术;模块化程序设

计;信息录入;浏览信息;选课;查询

第3页共22页

STUDENTS ELECTIVE COURSES MANAGEMENT SYSTEM

DESIGN

ABSTRACT

C language curriculum design and modern computer technology in the practical application of the combination, we are at this stage of learning theory course on their own side of the ability of a good test, from the beginning of the algorithm to run after the beautiful graphical interface and exciting available procedures, is a very good learning and training process. We consolidate the original theory of knowledge, cultivate our flexible application and integration of the knowledge learned and skills of analysis, ability to solve practical problem. So that we realize that their knowledge and ability in practical application and play. Can not only stimulate consciousness of innovation, also can develop creative ability, communication skills training. The student elective system management design time although only a week, but it does make me benefit. Students elective system management design my rich experience in computer operation, more deep understanding of the C language, familiar with the environment, more increased to Microsoft Visual C++ 6 using skills.

The C language is widely used at home and abroad a computer language. Language feature-rich, expressive capability is strong, flexible and convenient use, not only has the advantages of high-level language, but also has many of the characteristics of low-level language, suitable for the preparation of system software. At the same time, I think C language should be the operation of combining theory and curriculum, constantly writing to think, the two are inseparable. Us in the preparation of a larger process should divide it into several small procedures, it would be much easier.

第4页共22页

Key words:students elective system management; C language curriculum

design; computer technology; modular design; information; information query; selection;

第5页共22页

目录

1、需求分析„„„„„„„„„„„„„„„„„„„„„„„„1

2. 1概要设计„„„„„„„„„„„„„„„„„„„„„„1 2. 1模块设计及图示„„„„„„„„„„„„„„„„„„„1 2.2主函数流程设计„„„„„„„„„„„„„„„„„„„„„2 3详细设计„„„„„„„„„„„„„„„„„„„„„„„„„3 3. 1程序中的数据类型„„„„„„„„„„„„„„„„„„3 3. 2函数运行过程详解„„„„„„„„„„„„„„„„„„3 4、设计和调试分析„„„„„„„„„„„„„„„„„„„„„13 4. 1 调试中遇到的问题„„„„„„„„„„„„„„„„„„13 4. 2 算法复杂度分析„„„„„„„„„„„„„„„„„„„15 4. 3 经验和体会„„„„„„„„„„„„„„„„„„„„„15 5、用户使用说明„„„„„„„„„„„„„„„„„„„„„„16 6、测试数据和测试结果„„„„„„„„„„„„„„„„„„„16 参考文献„„„„„„„„„„„„„„„„„„„„„„„„„„22

第6页共22页

1 需求分析

假定有N 门课程,每门课程有课程编号,课程名称,课程性质,总学分,授课学时,实验上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。要求设计一选修课程系统,使之能提供以下功能:

(1)课程信息录入功能(课程信息用文件保存)---------输入; (2)课程信息浏览功能------输出;

(3)查询功能:(多种查询方式:一种、任意两种组合、三种都能满足)------算法;

(1)按学分查询 (2)按课程性质查询; (3)按课程名称查询; 要求:

(1)用C 语言实现系统,源程序要有适当的注释,使程序容易阅读; (2)函数功能要划分好(结构化程序设计);

(3)至少采用文本菜单界面(如果能采用图形菜单界面更好); (4)可以增加新功能模块

2概要设计

本程序功能模块根据程序设计的需求,综4.0合程序的实用性、智能化得考虑,将程序划分为6个模块分别编写:

2.1五个模块分别为:

(1)浏览课程信息模块 (2)查询课程信息模块 (3)进入系统进行选课模块 (4)选课情况统计模块 (5)录入选课信息模块

第7页共22页

2.2主函数的流程设计:

学生选课系统执行主流程如图所示,先执行主函数 按键的有效键值为0~5输入。各个按键的执行功能为:

“1”:浏览已录入的选修课课程信息调用函数,“2”:通过不同的方式查找记录,调用函数search(); “3”:进入系统进行选课,调用函数xuan_ke();

“4”:查看课程已选情况,调用函数“5”:录入选修课信息,调用函数input(); “0”:退出系统;

第8页共22页

3详细设计

3.1程序中定义的数据类型

3.1、1定义与课程有关的结构体 struct course {

int num; /*课程编号*/

char name[20]; /*课程名称*/ char kind[10]; /*课程性质*/

int taltime,ttime,etime,mark,term; /*课程时间,学分,

开课信息等*/ };

3.1.2定义与学生有关的结构体 struct student { };

int snum;/*学生学号*/ int cnum;/*所选课程编号*/ char cname[20];/*所选课程名称*/

3.2每个函数的过程详解

3.2.1void f1(); 函数原型:void f1(); 函数源程序: void f1()/*常用函数2*/

{printf("\n课程编号课程名称课程性质授课学时实验或上机学时总学时学分开课学期:\n");}

第9页共22页

函数功能及实现:此函数仅包含输出语句,在课程信息输出之前调用此函数,打印出表头信息

3.2.2void menu(); 函数原型:void menu() 函数源程序: void menu()/*主菜单*/ {

Printf(“\n\n\n”); \n");

\n");

\n");

\n");

printf(" * 5-录入选课信息 0-退出选课系统 * printf(" * 3-进入选课操作 4-选课情况统计 * printf(" * 1-浏览选课信息 2-查询选课信息 * printf(" ************************************** printf(" 欢迎使用学生选课系统!

\n");

printf(" ************************************** \n");

printf(" 请选择输入选项编号(请先选择5进行课程信

息录入): ");

}

函数功能及实现:此函数为输出菜单,进入系统后提示可根据供选择的项目进行后续操作。

3.2.3void browser(); 函数原型:void browser(); 函数源程序: /*浏览选课信息*/

第10页共22页

void browser()

{

FILE *fp;/*定义指向文件的指针*/ struct course c;/*定义课程结构体变量c*/ if((fp=fopen("course.txt","r"))==NULL) { } f1(); for(;!feof(fp);) /*直到文件结束*/ printf("\nCannot open course!\n");

{fscanf(fp,"%d %s %s %d %d %d %d %d\n",&c.num,&c.name,&c.kind,&c.ttime,&c.etime,&c.taltime,&c.mark,&c.term); /*将课程信息写入文件*/

printf("%5d%12s%9s%9d%12d%12d%8d%9d\n",c.num,c.name,c.kind,c.ttime,c.etime,c.taltime,c.mark,c.term);/*格式化输出*/

} fclose(fp);/*关闭文件*/

menu();

}

函数功能及实现:此函数先定义指向文件的指针*fp,课程结构体变量c ,通过if 语句判断文件是否存在,在调用函数f1(),输出表头信息,通过for 循环并使用fscanf 函数将文件中的课程信息读出并通过printf 打印到屏幕上,再通过fclose 函数关闭文件。

3.2.4void search();

函数原型:void search();

函数源程序:

/*查询选课信息*/

void search()

{

第11页共22页

FILE *fp; /*定义文件指针变量*/ struct course c;/*定义学生结构体变量c*/ int score; char kind[10]; char name[20]; int b; /*输入需要的查询课程信息的方式*/ printf("\n 1. 按学分查询\n\n"); printf("\n 2. 按课程性质查询\n\n"); printf("\n 3. 按课程名称查询\n\n"); printf(" 请选择查询方式,输入选项数字:"); scanf("%d",&b); for(;b3;) {printf("

scanf("%d",&b);} /*按学分查询*/ if(b==1) { printf("\n scanf("%d",&score); printf("\nCannot open course!\n"); f1(); for(;!feof(fp);) { fscanf(fp,"%d%s%s%d%d%d%d%d\n",&c.num,&c.name,&c.kind,&c.ttime,&c.etime,&c.taltime,&c.mark,&c.term);

第12页共22页

printf("%5d%12s%9s%9d%12d%13d%8d%9d\n",c.num,c.name,c.kind,c.ttime,c.etime,c.taltime,c.mark,c.term);

if((fp=fopen("course.txt","r"))==NULL) printf("\nCannot open course!\n"); f1(); } /*按课程细致查询*/ else if(b==2) {printf("\n 请输入您要查询的课程性质: "); } scanf("%s",&kind); for(;!feof(fp);) {

fscanf(fp,"%d%s%s%d%d%d%d%d\n",&c.num,&c.name,&c.kind,&c.ttime,&c.etime,&c.taltime,&c.mark,&c.term);

printf("%5d%12s%9s%9d%9d%11d%11d%11d\n",c.num,c.name,c.kind,c.ttime,c if(strcmp(c.kind,kind)==0) .etime,c.taltime,c.mark,c.term);

} /*按课程名称查询*/ else if(b==3) { printf("\n 请输入课程名称:");

第13页共22页

}

if((fp=fopen("course.txt","r"))==NULL) printf("\nCannot open course!\n"); f1(); for(;!feof(fp);) { fscanf(fp,"%d%s%s%d%d%d%d%d\n",&c.num,&c.name,&c.kind,&c.ttime,&c.etime,&c.taltime,&c.mark,&c.term);

if(strcmp(c.name,name)==0) printf("%5d%12s%9s%9d%9d%11d%11d%11d\n",c.num,c.name,c.kind,c.ttime,c.etime,c.taltime,c.mark,c.term);

}

函数功能及实现:先定义学生结构体变量s ,打印相关可供选择的选项,通过scanf 函数读取输入字符,打印表头,再使用if 语句进行相关选择。如果数“1”,则是按学分查询课程,符合第一个if 语句,输入想要查询的学分,程序通过for 循环从文件中读取课程信息,并通过printf 函数输出满足要求的课程信息;如选择“2”,符合第二个if 语句,则按照课程性质查询,输入课程性质,程序通过for 循环从文件中读取课程信息,并通过printf 函数输出满足要求的课程信息;如输入“3”,符合第二个if 语句,则按照课程名称查询,输入要课程名称,程序通过for 循环从文件中读取课程信息,并通过printf 函数输出满足要求的课程信息;查询完成后通过fclose 函数关闭文件,打印主菜单,返回主函数。

第14页共22页

} } else{ } fclose(fp); menu();/*调用menu 函数*/ printf("输入错误!"); exit(1);

3.2.5void xuan_ke();

函数原型:void xuan_ke()

函数源程序:

/*进入选课操作*/

void xuan_ke()

{

struct student s;/*定义学生结构体变量s*/

开):");

scanf("%d%d",&s.snum,&s.cnum); if((fp=fopen("course.txt","r"))==NULL) /*打开选课记录文件struct course c;/*定义课程结构体变量c*/ FILE *fp; /*定义文件指针变量*/ printf("\n 请输入您的学号及您要选择的课程编号(用空格分"course.txt"*/

{ } for(;!feof(fp);) {printf("\nCannot open course!\n"); fscanf(fp,"%d %s %s %d %d %d %d %d\n",&c.num,&c.name,&c.kind,&c.ttime,&c.etime,&c.taltime,&c.mark,&c.term);

} fclose(fp);/*关闭选课记录文件"course.txt"*/ if((fp=fopen("student.txt","a+"))==NULL) { printf("\nCannot open student!\n"); if(s.cnum==c.num) break; } /*将学生选课信息输入student.txt 文件*/

第15页共22页

fclose(fp); printf("\n 恭喜您选课成功!\n");

menu();

}

函数功能及实现:进入此函数可进行自由选课,首先定义了学生结构体变量s ,和课程结构体变量c 。选课学生输入自己的学号和要选的课程,通过for 循环打开文件并找到所要选择的课程,通过break 跳出循环,关闭课程文件“course.txt”并将学生选课信息存入文件“student.txt”中,关闭文件。打印菜单信息,返回主函数。

3.2.6void xuanke_information();

函数原型:void information();

函数源程序:

/*选课情况统计*/

void xuanke_information()

{

int total=0;/*人数统计变量*/ FILE *fp; struct student s; if((fp=fopen("student.txt","r"))==NULL)/*打开选课记录文件"student.txt"*/ { } printf("\n 学号课程编号课程名称\n"); for(;!feof(fp);) { fscanf(fp,"%d%d%s\n",&s.snum,&s.cnum,&s.cname); total++; printf("%22d%17d%18s\n",s.snum,s.cnum,s.cname);

第16页共22页

printf("\nCannot open student!\n");

printf("\n 选课学生总人数为:%d 人",total);

fclose(fp);

menu();

}

函数功能及实现:此函数为查看选修课被选择的情况。定义了变量total 为了统计选课人数,通过if 语句判断是否存在文件“student.txt”,通过for 循环打印出所有已选课学生的学号、选课课程编号和所选课程的名称,通过计数变量total 输出已选课的人数信息。然后打印菜单,返回主函数。

3.2.7void input()

函数原型:void input();

函数源程序:

/*录入选修课课程信息*/

void input()

{

");

scanf("%d",&count); printf("\n FILE *fp; struct course c; int count; int i; if((fp=fopen("course.txt","a+"))==NULL)/*建立文件"course.txt"*/ { } printf("\n (录入选课信息) 请输入课程门数: printf("cannot open file\n"); (各项目间用空格分开)\n\n");

第17页共22页

for(i=0;i

fprintf(fp,"%d %s %s %d %d %d %d %d\n",c.num,c.name,c.kind,c.ttime,c.etime,c.taltime,c.mark,c.term);

}

函数功能及实现:此函数录入课程信息,在查询、浏览、进入选课,查看选课信息等函数之前。定义指向文件的指针变量*fp,课程信息结构体c ,通过fopen 函数建立文件”course.txt”,后输入录入课程的门数,打印表头,通过for 循环,用scanf 函数从屏幕读取课程信息,并通过fprintf 函数将课程信息录入到文件“course.txt”中,最后输出主菜单,返回主程序。

3.2.8void main()

函数源程序:

/*主函数*/

void main()

{

int n; menu(); scanf("%d",&n); /*防止错误,提示重新输入*/ for(;n>5||n

第18页共22页

} fclose(fp); printf("\n 录入数据成功!\n\n"); menu();

} while(n>0&&n5||n

if(n==0)

}

函数功能及实现:函数先打印出主菜单,用户可通过输入项目编号进行后续操作,输入数字为0~5之间的任意数字,代表进入不同的模块,通过for 循环可有效避免错误选择。如果输入1~5通过while 循环和switch 调用相关函数,实现

第19页共22页

exit(0);/*退出选课系统*/

相关功能,调用完后,通过break 跳出循环,并选择后续操作。为了界面的更加简洁,调用DOS 命令,清屏。如果输入0则执行exit(0)退出程序。

4 设计和调试分析

4.1调试中遇到的问题

(1)在用scanf 函数给普通变量输入数据时,在变量名前漏写地址运算符&。 如:scanf(″%d %d″, x, y);

(2)在scanf 函数调用语句中,企图规定输入实型数据的小数位。

如执行以下语句:scanf(″%6.2f″, &a);

(3)输入数据时的数据形式与要求不符。

用scanf 函数输入数据时,必须注意要与scanf 语句中的对应形式匹配。 如:scanf(″%d, %d″,&x, &y);

若按以下形式输入数据:

2 4

是不合法。数据2和4之间应当有逗号。

(4)输入、输出时的数据类型与所用格式说明符不匹配。

例如有以下说明语句:

int x=1; char y=’a’;

则运行时执行语句

printf(″x=%c, y=%d \n″, x, y);

将给出与原意不符的结果:(在TURBO C 2.0 下运行)

(5)混淆"="和"=="。

在C 语言中,"="赋值运算符,"=="是关系运算符。

(6)在不该出现分号的地方加了分号。

例如:if(x>y) ;

printf(″x is larger than y. \n″);

(7)对于复合语句,忘记加花括号。

例如: i=1; a=0;

while (i<=10)

a+=i; i++;

第20页共22页

printf(″a=%d \n″,a);

(8)误把数组说明时所定义的元素个数作为最大下标值使用。

C 语言规定,引用数组元素时下标从0开始,即下标值的下限为0,而下标的上限值是数组定义时元素个数减1。

(9)在switch 语句的各分支中未使用break 语句。 例如:switch(n)

{

case 1:browser(); case 2:search(); case 3:xuan_ke();

case 4:xuanke_information(); case 5:input();

}

4.2 算法的时间复杂度分析

时间复杂度分析

设有n 们选修课则算法的时间复杂度依次为: browser()的时间复杂度为:T1=O(n); search()的时间复杂度为:T2=O(3*(2+n)) xuan_ke()的时间复杂度为:T3=O(2+2*n) xuanke_information()的时间复杂度为T4=O(1+2*n) input()的时间复杂度为:T5=O(1+2*n) 所以时间复杂度为T=O(n) 4.3经验和体会

(1)通过这次的课程设计,使我了解了一个简单的学生选课系统的设计过程,并且基本掌握了Microsoft Visual C++的基本用法, 掌握《C 语言程序设计》课程的基本知识及其应用情况,加深对该课程的理解,在这次设计过程中使我对编程和程序的开发建立了浓厚的兴趣。

(2)在设计过程中遇到了很多的问题,但是最后通过自己的努力或者在网上寻找最后都得到了解决,虽然这次的设计是一个很小的程序但是设计这样的程序

第21页共22页

真的不简单呀,虽然这次的设计时间很短,并且程序也不是很大,但是还是遇到了许多问题,但是我相信在以后的学习中我会更加的努力,并且努力的改正现在的程序,使之程序的功能更加的完善。

(3)通过此次编程培养了我们结构化程序设计的思想,加深了对高级语言基本语言要素和控制结构的理解,锻炼我们独立思考制作程序的能力,并且掌握了一些课程设计的相关知识与实践操作能力,为以后的学习提供了锻炼的机会。经过设计和开发,我对于数据的一致性的问题也通过程序进行了有效的解决。从而是我对c 语言这门课程有了更好的了解。

5 用户使用说明

(1)根据正确的提示安装软件。

(2)Intel486以上系列、AMD K6 以上系列等PC 台式机和便携式电脑都可运行。

(3) 打开该程序系统,浏览菜单,根据需要选择功能,进行各项操作。 操作如下:

点击开始菜单,进入菜单选择。 输入:将所需的信息输入。 输出:学生信息、课程查询

输入:根据不同的需要选择,当信息输入显示出错误时,进入浏览信息,找出错误。当错误不能改正,则退出浏览信息。

进入查询信息:则屏幕会出现三个对话框——按学分,课程性质和课程名称查找,查处相应的所选课程信息(是否选满)。当查询不能显示需要时进入修改程序,把所输入的信息 进行修改,使之正确能够正常运行或进入删除信息中,重新输入自己所要的信息。

当信息输入正确,进入你所需要的菜单程序中:

课程信息:显示课程编号、课程名称、课程性质、授课学时、实验或上机学

第22页共22页

时、总学时、学分 开课学期。

学生信息:显示出学生的学号。

6 测试数据和测试结果

(1)进入系统界面

(2)录入选修课课程信息:

根据提示输入课程信息,先输入课程门数,再输入相关课程信息,每个输入项用空格隔开,如图输入5门课程后的结果:

第23页共22页

(3)浏览课程信息:

在输入课程信息后方可进行课程信息浏览,如图是输入“1”进行课程信息浏览后得到的结果:

(4)按“2”进行课程信息查询 (1)按学分查询

首先输入“1

”按学分查询,再根据提示输入要查询的学分,如图为所有

第24页共22页

为1学分课程的相关信息:

(2)按课程性质查询

选择“2”为按课程性质查询,输入“自然科学”并按“Enter ”,得到所有性质为“自然科学”的课程,如图为得到的结果:

(3)按课程名称查询

输入“3”进行按课程名称查询,输入“大学语文”按“Enter ”得到如图的结果:

第25页共22页

(5)按“3”进入选课系统进行选课

选课时输入学号和所要选择的课程编号,并用空格隔开,如图是学号为“201153101”的学生选择编号为“1”(即大学语文课程)得到的结果:

(5)统计选课情况

输入“4”可以统计选课情况,如图是统计结果:

第26页共22页

6、按“0”退出选课系统

参考文献

第27页共22页

[1] [美]H M Deitel ,P J Deitel 著,薛万鹏等译. C 语言程序设计教程. 北京:

机械工业出版社,2000.07

[2] 谭浩强. C程序设计(第二版). 北京:清华大学出版社,1999.12

[3] [美]Kenneth A.Reek著,徐波译.C 和指针. 北京;人民邮电出版社2008.4

附录 源程序清单

第28页共22页

#include /*标准输入输出函数库*/ #include/*标准函数库*/ #include /*字符串函数库*/

/*定义与课程有关的结构体*/ struct course {

int num; /*课程编号*/

char name[20]; /*课程名称*/ char kind[10]; /*课程性质*/

int taltime,ttime,etime,mark,term; /*课程时间,学分,开课信息等*/ };

/*定义与学生有关的结构体*/ struct student {

int snum;/*学生学号*/

int cnum;/*所选课程编号*/

char cname[20];/*所选课程名称*/ };

/*函数原型*/ void f1(); void menu(); void browser(); void search(); void xuan_ke();

void xuanke_information(); void input();

/*常用函数1*/ void f1()

{printf("\n课程编号课程名称课程性质授课学时实验或上机学时总学时学分开课学期:\n");}

/*主菜单*/ void menu() {

第29页共22页

printf("\n\n\n");

printf(" 欢迎使用学生选课系统! \n");

printf(" ************************************** \n");

printf(" * 1-浏览选课信息 2-查询选课信息 * \n");

printf(" * 3-进入选课操作 4-选课情况统计 * \n");

printf(" * 5-录入选课信息 0-退出选课系统 * \n");

printf(" ************************************** \n");

printf(" 请选择输入选项编号(请先选择5进行课程信息录入): "); }

/*主函数*/ void main() {

int n; menu();

scanf("%d",&n);

/*防止错误,提示重新输入*/ for(;n>5||n

while(n>0&&n

switch(n) {

case 1:browser();break;/*浏览选课信息*/ case 2:search();break; /*查询选课信息*/ case 3:xuan_ke();break;/*进入选课操作*/

case 4:xuanke_information();break;/*选课情况统计*/ case 5:input();break;/*录入选课信息*/ }

scanf("%d",&n);

/*防止错误,提示重新输入*/ for(;n>5||n

第30页共22页

printf("\n 输入错误!请重新输入! ");

scanf("%d",&n);

}

system("cls");/*调用系统命令cls, 清除屏幕*/

}

if(n==0)

exit(0);/*退出选课系统*/

}

/*浏览选课信息*/

void browser()

{

FILE *fp;/*定义指向文件的指针*/

struct course c;/*定义课程结构体变量c*/

if((fp=fopen("course.txt","r"))==NULL)

{

printf("\nCannot open course!\n");

}

f1();

for(;!feof(fp);) /*直到文件结束*/

{fscanf(fp,"%d %s %s %d %d %d %d %d\n",&c.num,&c.name,&c.kind,&c.ttime,&c.etime,&c.taltime,&c.mark,&c.term); /*将课程信息写入文件*/

printf("%5d%12s%9s%9d%12d%12d%8d%9d\n",c.num,c.name,c.kind,c.ttime,c.etime,c.taltime,c.mark,c.term);/*格式化输出*/

}

fclose(fp);/*关闭文件*/

menu();

}

/*查询选课信息*/

void search()

{

FILE *fp; /*定义文件指针变量*/

struct course c;/*定义学生结构体变量c*/

int score;

char kind[10];

char name[20];

int b;

/*输入需要的查询课程信息的方式*/

printf("\n 1. 按学分查询\n\n");

printf("\n 2. 按课程性质查询\n\n");

第31页共22页

printf("\n 3. 按课程名称查询\n\n");

printf(" 请选择查询方式,输入选项数字:");

scanf("%d",&b);

for(;b3;)

{printf(" 输入错误,请重新输入!");

scanf("%d",&b);}

/*按学分查询*/

if(b==1)

{

printf("\n 请输入您要查询的学分: ");

scanf("%d",&score);

if((fp=fopen("course.txt","r"))==NULL)

printf("\nCannot open course!\n");

f1();

for(;!feof(fp);)

{

fscanf(fp,"%d%s%s%d%d%d%d%d\n",&c.num,&c.name,&c.kind,&c.ttime,&c.etime,&c.taltime,&c.mark,&c.term);

if(c.mark==score)

printf("%5d%12s%9s%9d%12d%13d%8d%9d\n",c.num,c.name,c.kind,c.ttime,c.etime,c.taltime,c.mark,c.term);

}

}

/*按课程性质查询*/

else if(b==2)

{printf("\n 请输入您要查询的课程性质: ");

scanf("%s",&kind);

if((fp=fopen("course.txt","r"))==NULL)

printf("\nCannot open course!\n");

f1();

for(;!feof(fp);)

{

fscanf(fp,"%d%s%s%d%d%d%d%d\n",&c.num,&c.name,&c.kind,&c.ttime,&c.etime,&c.taltime,&c.mark,&c.term);

if(strcmp(c.kind,kind)==0)

printf("%5d%12s%9s%9d%12d%13d%8d%9d\n",c.num,c.name,c.kind,c.ttime,c.etime,c.taltime,c.mark,c.term);

}

}

第32页共22页

/*按课程名称查询*/

else if(b==3)

{

printf("\n 请输入课程名称:");

scanf("%s",&name);

if((fp=fopen("course.txt","r"))==NULL)

printf("\nCannot open course!\n");

f1();

for(;!feof(fp);)

{

fscanf(fp,"%d%s%s%d%d%d%d%d\n",&c.num,&c.name,&c.kind,&c.ttime,&c.etime,&c.taltime,&c.mark,&c.term);

if(strcmp(c.name,name)==0)

printf("%5d%12s%9s%9d%12d%13d%8d%9d\n",c.num,c.name,c.kind,c.ttime,c.etime,c.taltime,c.mark,c.term);

}

}

else{

printf("输入错误!");

exit(1);

}

fclose(fp);

menu();/*调用menu 函数*/

}

/*进入选课操作*/

void xuan_ke()

{

struct student s;/*定义学生结构体变量s*/

struct course c;

FILE *fp; /*定义文件指针变量*/

printf("\n 请输入您的学号及您要选择的课程编号(用空格分开):"); scanf("%d%d",&s.snum,&s.cnum);

if((fp=fopen("course.txt","r"))==NULL) /*打开选课记录文件"course.txt"*/

{

printf("\nCannot open course!\n");

}

for(;!feof(fp);)

第33页共22页

{

fscanf(fp,"%d %s %s %d %d %d %d %d\n",&c.num,&c.name,&c.kind,&c.ttime,&c.etime,&c.taltime,&c.mark,&c.term);

if(s.cnum==c.num)

break;

}

fclose(fp);/*关闭选课记录文件"course.txt"*/

if((fp=fopen("student.txt","a+"))==NULL)

{

printf("\nCannot open student!\n");

} /*将学生选课信息输入student.txt 文件*/

fprintf(fp,"%d %d %s\n",s.snum,s.cnum,c.name);

fclose(fp);

printf("\n 恭喜您选课成功!\n");

menu();

}

/*选课情况统计*/

void xuanke_information()

{

int total=0;/*人数统计变量*/

FILE *fp;

struct student s;

if((fp=fopen("student.txt","r"))==NULL)/*打开选课记录文件"student.txt"*/ {

printf("\nCannot open student!\n");

}

printf("\n 学号课程编号课程名称\n");

for(;!feof(fp);)

{

fscanf(fp,"%d%d%s\n",&s.snum,&s.cnum,&s.cname);

total++;

printf("%22d%17d%18s\n",s.snum,s.cnum,s.cname);

}

printf("\n 选课学生总人数为:%d 人",total);

fclose(fp);

menu();

}

/*录入选修课课程信息*/

第34页共22页

void input()

{

FILE *fp;

struct course c;

int count;

int i;

if((fp=fopen("course.txt","a+"))==NULL)/*建立文件"course.txt"*/

{

printf("cannot open file\n");

}

printf("\n (录入选课信息) 请输入课程门数: "); scanf("%d",&count);

printf("\n (各项目间用空格分开)\n\n");

f1();

for(i=0;i

{

scanf("%d %s %s %d %d %d %d %d",&c.num,&c.name,&c.kind,&c.ttime,&c.etime,&c.taltime,&c.mark,&c.term);

fprintf(fp,"%d %s %s %d %d %d %d %d\n",c.num,c.name,c.kind,c.ttime,c.etime,c.taltime,c.mark,c.term);

}

fclose(fp);

printf("\n 录入数据成功!\n\n"); menu();

}

第35页共22页


相关内容

  • 宁波大学本科教学培养方案指导性意见
    宁 波 大 学 文 件 宁大政„2010‟101号 宁波大学本科教学培养方案指导性意见 为了进一步深化教育教学改革.适应构建创新人才培养体系与建设服务型教育教学体系的需要,学校决定启动新一轮本科教学培养方案修订工作,现提出如下指导性意见. ...
  • 高中语文教材简析
    高中语文教材简析(以人教版教材为例) 一.普通高中课程标准实验教科书介绍 ( 一 ) 指导思想 1. 在义务教育语文学习的基础上 , 进一步全面提高学生的语文素养 , 发挥语文课在育人上的独特优势 , 使学生具有适应未来社会生活所必需的语文 ...
  • 面向应用型人才培养的网络工程专业课程体系探索与实践
    文章编号:1672-5913(2009)19-0134-06 面向应用型人才培养的网络工程专业课程体系探索与实践 郭广军1,羊四清1,戴经国1,龚德良2 (1.湖南人文科技学院 计算机科学技术系,湖南 娄底 417000:2.湘南学院 计算 ...
  • [精品]高中课程设置方案
    篇一:高中课程设置方案 陕西省从20XX年秋季开始全面实施普通高中新课程,根据教育部颁布的<基础教育课程改革纲要(试行)><普通高中课程方案(试验)><关于进一步加强普通高中新课程实验工作的指导意见>和陕 ...
  • 物联网专业课程设置
    高校物联网专业课程设置 2010-06-22 17:46:58 作者:博客 来源:thingslink 浏览次数:7781 网友评论 0 条 年初教育部下达了高校设置物联网专业申报通知,众多高校争相申报.由于物联网涉及的领域非常广泛,从技术 ...
  • 工商管理专业人才培养方案
    工商管理本科专业人才培养方案 一.专业培养目标 本专业培养适应社会主义市场经济需要,德智体美全面发展,具备管理.经济.法律及企业管理方面的综合知识和能力,初步具备职业经理素质,能在企.事业单位及政府部门从事管理工作的高级专门人才. 按专业招 ...
  • 微电子科学与工程专业
    微电子科学与工程专业一.培养目标本专业培养德.智.体等方面全面发展,具备微电子科学与工程专业扎实的自然科学基础.系统的专业 知识和较强的实验技能与工程实践能力,能在微电子科学技术领域从事研究.开发.制造和管理等方面工作 的专门人才.二.专业 ...
  • 教育教学技能试题
    一.单项选择题1. 教师的表率作用主要体现在( ). A .言行一致 B .衣着整洁 C .举止端庄 D .谈吐文雅 我要纠错分享题解您的答案:空 正确答案:A 参考解析:B .C .D 虽然对学生有一定的影响,但起主要表率作用的还是A. ...
  • 演讲与口才读书笔记
    篇一:演讲与口才_心得体会1 <演讲与口才>学习心得 在我以前的认知里,演讲与口才其实就是在很多人面前的讲话和自己说话的口才,自我开始接触这门课程的时候,我慢慢发现自己的理解是很浅显的.其实<演讲与口才>这门课程不应 ...
  • 选修课个人形象设计论文1
    时间: 个人形象设计论文 院 系:经济管理学院 专 业: 信息管理与信息系统专业 班 级:信管班 姓 名:张 晓 钰 学 号:[1**********]1 2012年5月21日 个人形象设计论文 摘要:中国自古以来就是一个礼仪之邦,上至国家 ...