学生选修课程系统设计.docx
《学生选修课程系统设计.docx》由会员分享,可在线阅读,更多相关《学生选修课程系统设计.docx(35页珍藏版)》请在冰豆网上搜索。
学生选修课程系统设计
摘要
C语言一共只有32个关键字,9种控制语句,程序书写形式自由,主要用小写字母表示。
它把高级语言的基本结构和语句与低级语言的实用性结合起来。
C语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。
运算符丰富,C语言的运算符包含的范围很广泛,共有34种运算符。
C语言把括号、赋值、强制类型转换等都作为运算符处理。
从而使C语言的运算类型极其丰富,表达式类型多样化。
灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。
数据结构丰富,C语言的数据类型有:
整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。
能用来实现各种复杂的数据结构的运算。
并引入了指针概念,使程序效率更高。
另外C语言具有强大的图形功能,支持多种显示器和驱动器。
且计算功能、逻辑判断功能强大。
C语言的三种程序结构:
顺序结构、选择结构、循环结构、结构体和数组等。
学号C语言是学习单片机的重要前提,许多的控制系统都需要C语言来编程,所以学号C语言是必须的。
关键词:
学生选修课程系统;C语言课程设计;模块化程序设计;信息录入;浏览信息;查询;选课
Abstract
Clanguageatotalofonly32key,9kindsofcontrolstatements,andprogramwrittenformfreedom,mainlyuselowercaselettersaid.Itisthebasicstructureofthehigh-levellanguageandstatementandlow-levellanguagepracticalcombined.
Clanguagecanbelikeassemblylanguageregistration,byteandaddressforoperation,andthesethreearethemostbasiccomputer.
Theunitofwork.
Operatorisrich,Clanguageoperatorcontainsrangeisverywide,atotalof34kindsofoperator.Clanguagebrackets,assignment,forcedtypeconversion,etcasoperatorprocessing.SothattheClanguagearithmeticclass.
Typeisextremelyrichexpressiontypediversification.Agileuseallsortsofoperatorcanrealizeinotherhigh-levellanguages.
Torealizeintheoperation.
Datastructureisrich,Clanguagedatatypesare:
integer,real,charactertype,arraytype,pointertype,structure,type,Sharedbodytype,etc.Canbeusedtorealizeallkindsofcomplicateddatastructureoftheoperation.
Andintroducedthepointerconcept,maketheprocessmoreefficient.AnotherClanguagehaspowerfulgraphicsfunctions,support
Avarietyofdisplayanddrive.Andthecalculatingfunction,logicpowerful.
Clanguagethreeprogramstructure:
sequencestructure,choicestructure,circulationstructure,structure,andarray,etc.
StudentidClanguagelearningisanimportantprerequisiteforsinglechipmicrocomputer,manycontrolsystemneedClanguageprogramming,
SostudentidClanguageisamust.
Keywords:
Studentelectivesystem;Clanguagecurriculumdesign;Modularizedprogramdesign;Informationrecorded;Browseinformation;Query;elective
引言……………………………………………………………1
1C语言课程设计的目的……………………………………1
2课程设计题目……………………………………………1
2.1要求………………………………………………………1
2.2分析………………………………………………………2
2.3总体设计…………………………………………………2
2.4详细设计……………………………………………………3
2.4.1主函数,头文件及结构体声明…………………………………3
2.4.2管理员功能模块……………………………………………3
2.4.3学生功能菜单………………………………………………4
2.4.4创建链表模块………………………………………………4
2.4.5浏览模块…………………………………………………5
2.4.6查询模块…………………………………………………6
2.4.7插入链表模块………………………………………………7
2.4.8添加模块…………………………………………………7
2.4.9删除模块…………………………………………………8
2.4.10选修课程模块……………………………………………9
2.4.11读取文件模块……………………………………………9
2.4.12保存文件模块………………………………………………10
2.5运行结果……………………………………………………11
结论……………………………………………………………16
谢辞……………………………………………………………17
参考文献………………………………………………………18
附录……………………………………………………………19
引言
C语言是一种面向过程的计算机程序设计语言,它是目前众多计算机语言中举世公认的优秀的结构程序设计语言之一。
它由美国贝尔研究所的D.M.Ritchie于1972年推出。
1978后,C语言已先后被移植到大、中、小及微型机上。
C语言发展如此迅速,而且成为最受欢迎的语言之一,主要因为它具有强大的功能。
许多著名的系统软件,如DBASEⅣ都是由C语言编写的。
用C语言加上一些汇编语言子程序,就更能显示C语言的优PC-DOSWORDSTAR等就是用这种方法编写的。
在初学C语言时,可能会遇到有些问题理解不透,或者表达方式与以往数学学习中不同(如运算符等),这就要求不气馁,不明白的地方多问多想,鼓足勇气进行学习,待学完后面的章节知识,前面的问题也就迎刃而解了,这一方面我感觉是我们同学最欠缺。
大多学不好的就是因为一开始遇到困难就放弃,曾经和好多同学谈他的问题回答是听不懂、不想听、放弃这样三个过程,我反问,这节课你听过课吗?
回答又是没有,根本就没听过课,怎么说自己听不懂呢?
相应的根本就没学习,又谈何学得好?
学习C语言始终要记住“曙光在前头”和“千金难买回头看”,“千金难买回头看”是学习知识的重要方法,就是说,学习后面的知识,不要忘了回头弄清遗留下的问题和加深理解前面的知识,这是我们学生最不易做到的,然而却又是最重要的。
学习C语言就是要经过几个反复,才能前后贯穿学好。
学好C语言的运算符和运算顺序,这是学好《C程序设计》的基础,C语言的运算非常灵活,功能十分丰富,运算种类远多于其它程序设计语言。
在表达式方面较其它程序语言更为简洁,如自加、自减、逗号运算和三目运算使表达式更为简单,但初学者往往会觉的这种表达式难读,关键原因就是对运算符和运算顺序理解不透不全。
当多种不同运算组成一个运算表达式,即一个运算式中出现多种运算符时,运算的优先顺序和结合规则显得十分重要。
在学习中,只要我们对此合理进行分类,找出它们与我们在数学中所学到运算之间的不同点之后,记住这些运算也就不困难了,有些运算符在理解后更会牢记心中,将来用起来得心应手,而有些可暂时放弃不记,等用到时再记不迟。
1C语言课程设计的目的
高级语言课程设计是学习完《高级语言程序设计》课程后进行的一次全面的综合性上机实验。
其目的在于为同学提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼同学的分析解决实际问题的能力。
提高学生适应实际,实践编程的能力。
2课程设计题目
学生选修课程系统设计
2.1要求:
假定有n门课程,每门课程有课程编号、课程名称、课程性质、总学时、授课学时、实验或商机学时、血粉、开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。
试设计一个选修课程系统,使之能提供以下功能:
(1)系统以菜单方式工作。
(2)课程信息和学生选课信息输入功能(课程信息用文件保存)——输入。
(3)课程信息浏览功能——输出。
(4)查询功能(至少一种查询方式)——算法。
(5)按学分查询。
(6)某门课程学生选修情况(可选项)。
2.2分析:
数据结构可用结构体,课程结构体包括课程编号、课程名称、课程性质、总学时、授课学时、实验或上机学时、学分、开课学期。
题目要求课程信息用文件保存,应写入文件中,提供文件的输入输出等操作;在过程中需有浏览、插入、修改、查找、删除学生选课信息等操作,顾应分别建立个功能模块;另外还应提供键盘式选择菜单实现程序运行。
2.3总体设计
2.4详细设计
2.4.1主函数,头文件及结构体声明
主函数main()函数设计地比较简洁,只是提供一个主菜单,switch语句将整个程序分为两个大的功能模块:
2.4.2管理员功能模块
管理员Mangers()函数的功能一共有四个功能:
录入,浏览,查询,删除课程,运用字符串处理函数处理密码的问题,用一个switch语句实现函数的调用:
2.4.3学生功能菜单
学生功Students()函数能菜单包括六个功能:
浏览课程,查询课程,选修课程,浏览我所选修的课程,添加选修课程,删除错选的课程,也是用到switch语句来调用函数:
2.4.4创建链表模块
创建链表模块create_form()函数,用于录入课程信息:
2.4.5浏览模块
浏览模块主要用管理员中的“浏览课程”prin()函数和学生功能中的“浏览所有所有课程”prin1()函数,将所有的课程信息输出,即将all_sub.txt文件里面的内容全部输出:
2.4.6查询模块
查询模块search()函数主要用于管理员功能中的“查询课程”和学生功能模块中的“查询所有课程”,查询模块共分为三个查询方法:
按课程名称查找,按课程性质查找和按学分查找switch语句中,每一个case语句就是一中查询方法:
2.4.7插入链表模块
插入链表myInsert(SUB*subj)函数操作主要用于添加课程,在整个课程信息中加入一些新课程,它在添加模块中被调用:
2.4.8添加模块
添加模块insert()函数主要用于增加课程信息,采用链表的操作:
2.4.9删除模块
删除模块del()函数主要用于管理员删除课程信息和学生删除自己的选课,全部采用删除链表中的某一个节点的操作:
2.4.10选修课程模块
选修课程模块choose()函数用于学生选择选修课程,采用插入链表的操作:
2.4.11读取文件模块
读取文件模块readfile()函数是用来读出文件内容,并将内容输出到内存中,当输入文件名时,就能打开指定的文件,当输入all_sub.txt时,打开所有课程信息的文件,当输入my_sub.txt时,就是浏览学生选修的课程信息:
2.4.12保存文件模块
保存文件模块savefile()函数共分为两个子程序,分别是将修改的信息保存到all_sub.txt和my_sub.txt文件中:
2.5运行结果
开始运行
管理员菜单
按1进人录入课程模块
输完课程信息后:
按2进人管理员浏览模块
按3进人管理员查询模块
按课程性质查询
按学分查询
按4进行管理员删除模块
学生菜单
按1学生浏览所有课程
按2学生查询课程信息
按课程性质查询
按学分查询
按3进人选修课程模块
按4进人浏览我选修的课程
按5进人删除错选课程模块
结论
经过测试,这个系统已经达到了题目中的全部要求。
这个程序有很多优点有一个是界面简明,简洁明了的程序菜单;一个是智能化的模块设计,减少了许多人工操作,如功能模块操作结束后,均会返回主菜单进行下一模板的运行,并提示是否再进行类似的操作,这样给用户带来了操作的方便,大大提高了学生选课的效率还有就是提示语言既简洁又明确,层次分明等等;当然也有缺点如程序仍然存在不合理的地方,例如程序某些部分输入错误不能立刻返回改正;信息表达方式不丰富,比较单一,缺少图片、音乐等元化表达方式。
编程过程结构体有float型数据时系统提示有错误,用int或char型代替然后定义可解决。
在调试没运行完自动跳出主界面:
主要可能遇到float型数据时系统错误。
有些字母输入错误,仔细查找就可解决;插入链表阅读和输出文件不熟悉;不熟悉如何使形参与实参一一对应。
经过查询资料和老师同学们的帮忙基本解决了。
通过这一周的的C语言课程设计,不仅巩固了自己之前掌握的C程序的设计基础,还学弥补了在上课期间没有学会的知识。
经过这次课设,我充分认识到了C语言的用途是非常广的,功能也非常强大,是学计算机不可缺少的语言。
更重要的是,在这次编程中熟悉了编写一个比较复杂程序的流程,以及发现问题、解决问题的能力,为下一步计算机语言的学习做了准备。
之前感觉遥不可及的功能,现在可以实现了,非常感谢老师和同学的热心帮助,这是我得以及时完成这个程序的重要因素。
谢辞
参考文献
[1]谭浩强,C程序设计题解与上机指导(第二版),北京,清华大学出版社,2000年9月。
[2]甘玲,解析C程序设计,北京,清华大学出版社,2007年3月。
[3]郭翠英,《C语言课程设计案例精编》,中国水利水电出版社,2005年。
[4]黄明,梁旭,万洪莉,《C语言课程设计》,电子工业出版社,2006年。
[5]王成端魏先民等,《C语言程序设计实训——题解、实验、课程设计与样题》,中国水利水电出版社,2005年。
[6]盛夕清,赵阳等编著,《C语言程序设计学习指导、实验指导与课程设计》,中国水利水电出版社,2006年。
附录
源程序代码:
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#include"malloc.h"
voidprin1();
voidchoose();
typedefstructsubjects
{
intnum;//课程编号
charname[20];//课程名称
charkind[10];//课程性质
intstime;//总学时
intttime;//授课学时
intetime;//实验或上机学时
intscore;//学分
intterm;//开课学期
structsubjects*next;
}SUB;
SUB*head=NULL;
SUB*create_form()//创建链表
{
SUB*head,*tail,*p;
intnum,stime,ttime;
intetime,score,term;
charname[20],kind[10];
intsize=sizeof(SUB);
head=tail=NULL;
printf("输入选修课程信息:
\n");
scanf("%d%s%s%d%d%d%d%d",&num,name,kind,
&stime,&ttime,&etime,&score,&term);
while(num!
=0)
{
p=(SUB*)malloc(size);
p->num=num;
strcpy(p->name,name);
strcpy(p->kind,kind);
p->stime=stime;
p->ttime=ttime;
p->etime=etime;
p->score=score;
p->term=term;
if(head==NULL)
head=p;
else
tail->next=p;
tail=p;
scanf("%d%s%s%d%d%d%d%d",&num,name,
kind,&stime,&ttime,&etime,&score,&term);
}
tail->next=NULL;
returnhead;
}
voidsavefile()//保存文件
{
SUB*p;
FILE*fp;
fp=fopen("2.txt","w");
if(fp==NULL)exit(0);
printf("课程编号课程名称课程性质总学时
授课学时实验或上机学时学分开课学期\n");
for(p=head;p;p=p->next)
fprintf(fp,"%5d%12s%9s%9d%9d%11d%11d%7d\n",
p->num,p->name,p->kind,p->stime,p->ttime,p->etime,p->score,p->term);
fclose(fp);
printf("创建后的信息已放入'2.txt'文件中\n");
system("pause");
}
voidsavefile1()//保存文件
{
SUB*p;
FILE*fp;
fp=fopen("3.txt","w");
if(fp==NULL)exit(0);
for(p=head;p;p=p->next)
fprintf(fp,"%5d%12s%9s%9d%9d%11d%11d%7d\n",
p->num,p->name,p->kind,p->stime,p->ttime,p->etime,p->score,p->term);
fclose(fp);
printf("创建后的信息已放入'3.txt'文件中\n");
system("pause");
}
voidreadfile()//阅读文件
{
void*myInsert(SUB*);
SUB*newSub;//新课程
intnum,stime,ttime,etime;
intscore,term;
charcname[20],kind[10],fname[20];
FILE*fp;
fp=fopen("2.txt","r");
while(!
feof(fp))
{
newSub=(SUB*)malloc(sizeof(SUB));
fscanf(fp,"%d%s%s%d%d%d%d%d\n",&newSub->num,newSub->name,newSub->kind,
&newSub->stime,&newSub->ttime,&newSub->etime,&newSub->score,&newSub->term);
myInsert(newSub);
}
fclose(fp);
}
voidprin()//浏览所有课程
{
SUB*ptr;
head=NULL;
readfile();
if(head==NULL)
{
printf("\n\n\t*********NORECORDS!
************\n");
return;
}
printf("课程编号课程名称课程性质总学时授课学时
实践或上机学时学分开课学期\n");
for(ptr=head;ptr;ptr=ptr->next)
{
printf("%5d%12s%9s%9d%9d%11d%11d%7d\n",ptr->num,ptr->name,
ptr->kind,ptr->stime,ptr->ttime,ptr->etime,ptr->score,ptr->term);
}
system("pause");
}
voidprin1()//浏览所有选修课程
{
SUB*ptr;
FILE*fp;
if((fp=fopen("3.txt","r"))==NULL)
{
printf("Cannotopenfile.\n");
choose();
}
printf("课程编号课程名称课程性质总学时授课学时
实践或上机学时学分开课学期\n");
while(!
feof(fp))
{
ptr=(SUB*)malloc(sizeof(SUB));
fscanf(fp,"%d%s%s%d%d%d%d%d\n",&ptr->num,ptr->name,ptr->kind,
&ptr->stime,&ptr->ttime,&ptr->etime,&ptr->score,&ptr->term);
printf("%5d%12s%9s%9d%9d%11d%11d%7d\n",ptr->num,ptr->name,
ptr->kind,ptr->stime,ptr->ttime,ptr->etime,ptr->score,ptr->term);
}
fclose(fp);
system("pause");
}
void*myInsert(SUB*subj)//链表插入操作
{
SUB*ptr,*ptr2;
ptr=subj;
if(head==NULL)
{
head=ptr;
head->next=NULL;
}
else
{
for(ptr2=head;ptr2;ptr2=ptr2->next)
if(ptr2->next==NULL)