第一篇:c语言课程设计 学生选修课程系统设计
题目:学生选修课程系统设计
功能:假定有n门课程,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息。试设计一选修课程系统。
分步实施:
1、初步完成总体设计,搭好框架,确定人机对话界面,确定函数个数;
2、建立一个文件,将每条记录信息写入文件中并能显示于屏幕上
3、完成上述添加、查找(课程编号、课程名称、课程性质等)、修改等功能。
4、进一步要求:学生选修课程(可选项)
要求:
1、用C语言实现程序设计;
2、利用结构体数组实现信息的数据结构设计;
3、系统的各个功能模块要求用函数的形式实现;
4、界面友好(良好的人机交互),程序加必要的注释。
课程设计实验报告要求:
1、预习报告:题目、课程设计任务、数据结构、程序的总体设计(算法)、模块划分。
2、实验总结报告:流程图、主要源程序代码(需打印)、测试情况及调试中问题与解决方案、小结等。
第二篇:C语言课程设计学生通讯录管理系统设计
C语言课程设计学生通讯录管理系统设计
一、题目内容的描述
学生通讯录管理系统设计
设计一个学生通信录,学生通迅录数据信息构成内容可自行设计(如:姓名、家庭地址、邮政编码、电话号码等等),通信录数据类型定义为结构体类型。由键盘输入数据(最好要考虑输入数据输入的格式及输入数据的有效性),然后进行以下的功能实现。程序要求主函数是一个功能选择菜单,其它各功能都用各自的函数实现。
功能要求如下:
1、能建立、修改和增删学生通讯录
2、能够按多种方式进行查询,例如按姓名、按电话号码等。
3、通讯录的数据保存在文件中,运行程序时将通讯录数据从文件读取到内存中。对通讯录进行增加、删除、修改学生数据后,提供功能菜单,可以将内存中修改过的通讯录重新保存至文件。
二、应用程序功能的详细说明
1、应用程序实现了可视化的系统操作界面。
2、对学生通讯录形成了系统化的管理,操作简便明了。
3、程序具有系统帮助,添加、显示、查询、刷新、删除、排序、保存、修改、读取学生通讯录的功能。各项功能均可按照文字提示操作,浅显易懂。
4、系统的各个功能模块都用函数的形式来实现(readfile()、seek()、modify()、sort()、insert()、del()、save()、menu())方便查看。
5.可以将信息保存在文件(“student.txt“)中,亦可将信息从文件中读取出来,灵活方便。
三、主要模块的算法描述
学生通讯录管理系统
刷新学生信息readfile()
查询学生信息seek()
增加学生信息insert()
显示学生信息display()
退出系统
修改学生信息modify()
删除学生信息del()
保存当前学生信息save()
汇总当前学生数目number()
系统帮助help()
查询学生信息
按姓名查询
退出
按学号查询
开始
以可读写的方式打开一个数据文件
将此文件的内容读出,并存入一个新的结构体类型的数组中。
调用menu()菜单函数
进入while()主循环
输入1-8中的一数值,选择相应操作。
输入是否为0
判断键值,调用相应函数,完成相应功能。
是否已对修改存盘
调用函数save()函数,进行写数据文件操作
结束
模块一:头文件,变量定义,函数的声明
对系统所使用的变量进行定义,对函数进行声明。
模块二:录入学生信息
声明函数void
readfile(),说明一个文件指针FILE
*fp打开文
件“student.txt“。
模块三:学生信息的查找
声明void
seek()为查找函数,通过switch(item)设定用学号查找,用姓名查找两个分支。
模块四:学生信息的修改
声明void
modify()为学生信息修改函数,通过switch(item)设定
所要修改的项目。
模块五:刷新学生信息
声明void
sort()将录入学生系按升序排列,用的是“冒泡排序法”
实现排序。
模块六:增加学生信息
声明void
insert()插入学生信息,先通过判断学生是否存在,若
否则继续输入,若是则跳出,重新循环。
模块七:删除学生信息
声明void
del()实现学生信息删除,通过学号对比确定要删除的信
息,然后用后一个替换掉。
模块八:显示学生信息
通过display()函数输出学生信息。
模块九:保存信息
通过fp=fopen(“student.txt“,“w“);写入信息。
模块十:汇总学生数目
通过number()函数将已有男女生及总学生数目汇总出来。
模块十一:系统帮助
通过help()函数帮助操作。
模块十二:界面菜单
通过switch(num)调用以上各函数,实现功能。
1、程序采用模块化设计,各模块独立,可分块调试,个模块由主函数控制调用。
2、其中主要模块(readfile()、seek()、modify())都是利用数组,指针来实现数据结构设计。
3、数据库设计的任务是确定系统所需要的数据库。数据库是表的集合,通常一个系统只需一个数据库。设计人
是根据需求分析,确定数据库所包含的表及字段、表间的关系,然后具体确定表的结构,包括字段名、字段类型及宽度,需要的索引等。根据对需求得到的数据结构进行分析,按数据输入输出的要求,确定表和表间的关系,进行验证、调整、修改、完善,使其能够实现用户对数据和功能的要求。通讯信息表包括以下字段:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail。学号为主索引。
四、结束语
我设计的程序总体功能大都能够运行顺利,但有许多地方比较复杂,需要进一步修改,进行简化。通过这次课程设计的锻炼,我收获很多,具体归纳为以下几点:
1、首先,也是最重要的一点,学会如何将一个复杂的问题简化,将一个较大的问题分成几个小问题,再一一解决这些小问题。在设计一个程序之前,要学会对程序功能进行规划,将其分为几个不同的功能模块,要思路清晰,简单易用;
2、学会灵活运用已有的知识,同时适当的拓展一些知识;比如,这次设计过程中,有一些函数以前就很少用到,甚至没有见过,但对程序的设计及用户界面的改善带来方便;
3、解决问题时,要尽可能考虑全面。每一个细节都很重要,既要避免功能的重复,也要避免功能疏漏的地方!
4、在这次课程设计过程中,参考了许多资料,发现C语言真的很有意思!比如我看到一个关于用C语言编写的小程序:五子棋、俄罗斯方块、推箱子等,等这次课程结束后,我就想利用C语言编写这些小游戏。曾经认为C是个挺枯燥的课程,现在发现这不仅仅是个简单的课程,而是个很实用的计算机工具!
五、程序源代码清单
#include
#include
#include
#define
BUFLEN
#define
LEN
#define
N
struct
record
{
char
code[LEN+1];
char
name[LEN+1];
int
age;
char
sex[3];
char
time[LEN+1];
char
add[30];
char
tel[LEN+1];
char
mail[30];
}stu[N];
int
k=1,n,m;
void
readfile();
void
seek();
void
modify();
void
insert();
void
del();
void
display();
void
save();
void
number();
void
menu();
int
main()
{
while(k)
menu();
system(“pause“);
return
0;
}
void
readfile()//刷新学生信息
{
char
*p=“student.txt“;
FILE
*fp;
int
i=0;
if
((fp=fopen(“student.txt“,“r“))==NULL)
{
printf(“Open
file
%s
error!
Strike
any
key
to
exit!“,p);
system(“pause“);
exit(0);
}
while(fscanf(fp,“%s
%s%d%s
%s
%s
%s
%s“,stu[i].code,stu[i].name,&stu[i].age,stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail)==8)
{
i++;
i=i;
}
fclose(fp);
n=i;
printf(“录入完毕!\n“);
}
void
seek()//查询学生信息
......void
modify()//修改学生信息
......void
sort()//对学生信息按学号排序
{
int
i,j,*p,*q,s;
char
temp[10];
for(i=0;i { for(j=n-1;j>i;j--) if(strcmp(stu[j-1].code,stu[j].code)>0) { strcpy(temp,stu[j-1].code); strcpy(stu[j-1].code,stu[j].code); strcpy(stu[j].code,temp); strcpy(temp,stu[j-1].name); strcpy(stu[j-1].name,stu[j].name); strcpy(stu[j].name,temp); strcpy(temp,stu[j-1].sex); strcpy(stu[j-1].sex,stu[j].sex); strcpy(stu[j].sex,temp); strcpy(temp,stu[j-1].time); strcpy(stu[j-1].time,stu[j].time); strcpy(stu[j].time,temp); strcpy(temp,stu[j-1].add); strcpy(stu[j-1].add,stu[j].add); strcpy(stu[j].add,temp); strcpy(temp,stu[j-1].tel); strcpy(stu[j-1].tel,stu[j].tel); strcpy(stu[j].tel,temp); strcpy(temp,stu[j-1].mail); strcpy(stu[j-1].mail,stu[j].mail); strcpy(stu[j].mail,temp); p=&stu[j-1].age; q=&stu[j].age; s=*q; *q=*p; *p=s; } } } void insert()//增加学生信息 ......void display()//显示当前学生信息 { int i; printf(“所有学生的信息为:\n“); printf(“学生学号,学生姓名,年龄,性别,出生年月,地址,电话,E-mail\n“); printf(“--------------------------------------------------------------------\n“); for(i=0;i { printf(“%6s,%7s,%5d,%5s,%9s,%8s,%10s,%14s\n“,stu[i].code,stu[i].name,stu[i].age,stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail); } } void save()//保存当前学生信息 { int i; FILE *fp; fp=fopen(“student.txt“,“w“); for(i=0;i { fprintf(fp,“%s,%s,%d,%s,%s,%s,%s,%s\n“,stu[i].code,stu[i].name,stu[i].age,stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail); } fclose(fp); } void number()//汇总学生数目 { int i,girl,boy=0; for(i=0;i if(strcmp(stu[i].sex,“1“)==0) {boy++;} girl=n-boy; printf(“男生人数是:%d\n女生的人数是:%d\n“,boy,girl); printf(“总的学生人数为:%d“,n); } void help()//系统帮助 { printf(“输入性别时男为1,女为2“); printf(“\n3.增加学生信息后,切记保存按7;\n“); printf(“\n4.谢谢您的使用!\n“); } void menu()//可视化的系统操作界面 { int num; printf(“ \n\n 学生通讯录管理系统 \n\n“); printf(“ *********************系统功能菜单************************ \n“); printf(“ -------------------------------- ------------------------------- \n“); printf(“ 1.刷新学生信息 2.查询学生信息 \n“); printf(“ ********************************************* \n“); printf(“ 3.修改学生信息 4.增加学生信息 \n“); printf(“ ********************************************* \n“); printf(“ 5.按学号删除信息 6.显示当前信息 \n“); printf(“ ********************************************* \n“); printf(“ 7.保存当前学生信息 8.汇总学生数目 \n“); printf(“ ********************************************* \n“); printf(“ 9.系统帮助 10.退出系统 \n“); printf(“ --------------------------------- ------------------------------ \n“); printf(“ ************************************************************ \n“); printf(“请选择菜单编号:“); scanf(“%d“,&num); switch(num) { case 1:readfile();break; case 2:seek();break; case 3:modify();break; case 4:insert();break; case 5:del();break; case 6:display();break; case 7:save();break; case 8:number();break; case 9:help();break; case 10:k=0;break; default:printf(“请在1-10之间选择\n“); } } 题目 一、学生选课管理系统 第一部分:课程设计名称、目的、要求 第二部分:程序总体设计思路 第三部分:程序功能划分、图示及流程图 第四部分:程序设计数据、运行结果 第五部分:程序的优缺点 第六部分:心得体会 第七部分:附录(源程序) 第八部分:附录(参考文献) 目录 ..............................................................................第一部分:课程设计名称、目的、要求 名称:学生选修课程系统设计 目的:运用C语言提高解决实际问题的能力 实验环境:Microsoft Visual C++ 6.0 内容: 假定有n门课程,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。【功能】 系统以菜单方式工作 课程信息录入功能(课程信息用文件保存)--输入 课程信息浏览功能--输出 查询功能:(至少一种查询方式)--算法 按学分查询 按课程性质查询 学生选修课程(可选项) 第二部分:程序总体设计思路 由于C语言是面对过程的语言,故我的设计思路是根据目标程序运行的过程来编写的。 具体的设计思路如下: 程序的要求是设计学生选修课管理系统,对选修课程能够进行录入和修改操作等,要求有菜单界面和退出功能。首先,考虑到程序的数据输入,可以设置一个管理员登陆选项,通过该选项进入管理员界面,进行选修课的录入和修改操作,最后将录入的课程保存到相应的文件中。然后定义各种函数的功能包括查看,查询,删除等。另一个为学生登陆界面,该界面学生可以进行课程选择和浏览查询等操作。在进行该操作之前需要对管理员保存的文件进行读取,然后对其中的内容进行查询等,在学生选好课程以后,可以将其选好的课程保存于相应的文件中,以便下次进行修改。通过函数的层层调用来实现程序的逻辑结构。中间通过文件的打开和关闭实现对文件内部所包含的数据的操作。 整个程序的设计思路到此结束。 第三部分:程序功能划分、图示及流程图 【功能模块划分及其流程图】 本程序功能模块根据程序设计的需求,综合程序的实用性、人性化、智能化的考虑,将程序划分为6个部分分别编写,程序主体功能将由这9个部分来完成。这9个部分依次是: 1.登录界面函数;void login()2.学生登录界面据函数:void stu_login()3.管理员登录界面函数:void man_login()4.退出界面函数:void bye_sys() 5.课程选择函数:void c_select()6.课程浏览函数:void c_view()7.课程查询函数:void c_search()8.课程增加函数:void c_add()9.课程删除函数:void c_delete()10.菜单函数:void index()11.主函数部分; main() 总体设计: 学生选课系统管理员登录学生登录新增课程删除课程课程浏览查询课程学生选课课程浏览课程查询c_add函数c_delete函数c_view函数c_search函数c_select函数c_view函数c_search函数 系统功能模块图 部分函数流程图: 1、课程选择函数: 开始输入要选择的课程的编号j=0;j 2、课程查询函数 开始输入要查询的课程的编号j=0;j 3、课程增加函数 开始输入要增加的课程的编号j=0;j 4、课程删除函数 开始输入要删除的课程的编号nj=0;j 本程序是一款应用软件,故数据设计、程序运行结果应在程序的 运用中得以体现,现在通过一个程序的运用事例来对程序运行结果进行演示与实现。【软件运用举例】 1、程序开始界面如下: 选择某个选项,如进行管理员登录,进行课程的增加 进入管理员界面: 2、再选择所要进行的操作,如进行课程增加,结果如下: 下面可以进行继续增加课程或者退出: 3、选择课程浏览,可以分页查看相应的课程信息: 第一页: 第二页: 4、课程查询 查找结果: 4、管理员课程删除操作: 删除后可以进行浏览,观察删除后的结果: 可见删除后只有一条记录。删除操作完成正确。下面进行学生操作的使用方法: 1、学生登陆界面: 2、选择学生选课选项: 3、学生登陆也可进行课程浏览和查询函数,其结果与管理员登陆相同,不再演示。 第五部分:程序的优缺点 【程序的优点】 算法是程序的灵魂,程序的优点首先表现在算法上的优点,其次才是功能上的。 [算法上的优点]主要体现在以下三点: 1.程序采用main主函数方式设计,程序的主体的功能大都由该功能 完成。程序如此设计有利于程序的进一步改进及有助于程序执行效率的提高。 2.程序对文件数据的读写采用了fread和fwrite块读写函数,能够将文件中的数据完全读出,然后赋到定义的数组中,再在相应的数组中进行一系列操作,最终再写入文件。 3.插入操作在本程序中将课程信息直接插入数组最后一个节点,从而减少了数据的相互移动,节省了时间。 [功能上的优点] 主要体现在以下两点: 1. 简洁明了的程序菜单。程序主要采用了层次不同的菜单,相互独立又相互联系,巧妙相接,符合用户的使用习惯与思维。2. 人性化的程序提示语言,程序提示语言较人性化,不仅大多为祈使语句、疑问句,而且提示明确,具有较强的明确的指导作用。程序提示不仅层次分明,提示方式多样,而且提示信息井然有序,更加有利于用户顺利、准确地看懂程序并进行操作。 【程序的缺点】 主要表现在以下两点: 1、本程序没有进行相应的密码操作,所以对于使用者来说可能存在比较大的不保密性。需要改善。 2、本程序没有使用文本读写函数fscanf和fprintf,所以的到的课程文件和选课文件都是二进制形式。 第六部分:心得体会 选课系统程序比起通讯录程序来讲好写一些,由于本程序用到了数组,对于数组的操作掌握的比较熟练,所以在编写程序的时候困难没有那么多。 本程序在编写的过程中用到了许多通讯录中的模块化设计和函数互相调用的思想,使得编写比较方便和好用。 通过该系统的课程设计分析,我掌握了模块化设计的方法,理解和运用了结构化程序设计的思想和方法,掌握和提高了运用C语言进行程序设计的能力。 程序设计的过程,实际上是确定解决问题的详细步骤,而这个步骤通常叫做流程,在程序设计过程中理清楚整个问题的流程很重要,然后采取逐步细化的方法实现整个程序。 对于一个较大的应用程序,一般不可能一次就设计出一个很完善的系统。通常要先设计满足基本要求的系统,然后再测试或者在使用的过程中不断完善,慢慢地做成一个功能很完善选修课程管理系统。所以在进行调试的时候需要对许多变量理解和掌握其变化规律等,这对于我更好的掌握visual C中调试的工具有很大的帮助。 总之经过这次课程设计,我对c语言的使用和理解都有了很大的加深,对于编程的思想也有了很多新的理解和感受。 第七部分:附录 一、参考文献: 1、李丽娟主编,C语言程序设计教程(第二版),人民邮电出版社 2、严蔚敏主编,数据结构(C语言),清华大学出版社 3、崔单主编,C语言程序设计案例精粹,电子工业出版社 4、谭浩强主编,程序设计(第三版),清华大学出版社 二、源程序 #include“stdio.h” #include“stdlib.h” #include“windows.h” #include“string.h” void index();//首页 void login();void bye_sys();//退出界面 void stu_login();//学生登录菜单 void c_select();void c_view();//课程浏览 void c_add();//增加课程 void c_delete();void c_searchs();//学生查询函数 void c_searchm();//管理员查询函数 void c_viewm();//管理员浏览函数 void c_views();//学生浏览函数 struct course//定义课程结构体 { int c_num; char c_name[20]; int c_score; int c_nelepeo;//课程已选人数 int c_melepeo;//课程人数上限 };struct student { char s_number[10]; char s_password[10];};struct manager { char m_name[10];char m_password[10];}; void index()//首页 { char input; printf(“nnttt*****************************n”); printf(“ttt 湖南大学学生选课系统n”); printf(“ttt*****************************nnn”); printf(“ttt*****************************nnn”); printf(“ttt*****************************nnn”); printf(“ttt*****************************nnn”); printf(“ttt**********设计者:刘晓斌******nnn”); input=getchar(); system(“cls”);} void login()//登陆界面 { void stu_login(); void man_login(); void bye_sys(); int input; do { system(“cls”); printf(“nnnt1.学生登录n”); printf(“t2.管理员登陆n”); printf(“t3.退出本系统n”); printf(“t请选择服务类别:”); scanf(“%d”,&input); if(input!=1&&input!=2&&input!=3)//输入数不等于选项的时候打印画面 { printf(“nt输入出错!请重新选择~n”); printf(“nt按任意键返回选择页面~nt”); getchar();getchar(); system(“cls”); } if(input==3)//如果输入3退出系统 { bye_sys(); } }while(input!=1&&input!=2&&input!=3); switch(input) { case 1:stu_login();break; case 2:man_login();break; } } void bye_sys()//退出界面 { exit(0);} void man_login(){ void c_add(); void c_delete(); void c_view(); void c_searchm(); int in; do { system(“cls”); printf(“nnt1.新增课程n”); printf(“t2.删除课程n”); printf(“t3.课程浏览n”); printf(“t4.课程查询n”); printf(“t5.退出n”); printf(“nnt请选择服务种类:”); scanf(“%d”,&in); if(in!=1&&in!=2&&in!=3&&in!=4&&in!=5) { printf(“nt没有这项服务t按任意重新选择”); getchar();getchar(); } }while(in!=1&&in!=2&&in!=3&&in!=4&&in!=5); switch(in) { case 1:c_add();break; case 2:c_delete();break; case 3:c_viewm();break; case 4:c_searchm();break; case 5:login();break; } } void stu_login()//学生登录菜单 { void c_select(); void c_view(); void c_searchs(); void login(); int input; do { system(“cls”); printf(“nnnt--学生登陆--”); printf(“nnt1.学生选课n”); printf(“t2.课程浏览n”); printf(“t3.课程查询n”); printf(“t4.退出n”); scanf(“%d”,&input); if(input!=1&&input!=2&&input!=3&&input!=4) { printf(“nt没有这项服务~n”); printf(“t按任意键重新选择”); getchar(); getchar(); } }while(input!=1&&input!=2&&input!=3&&input!=4); switch(input) { case 1:c_select();break; case 2:c_views();break; case 3:c_searchs();break; case 4:login();break; } } void c_select(){ int n,in,i=0,j;int flag=0; FILE *fp; FILE *fp1; char input; struct course courses[10]; if((fp=fopen(“course.dat”,“rb”))==NULL)//判断是否存在课程 { printf(“nnnt课程不存在nn”); printf(“t<按任意键返回管理菜单>nt”); input=getchar(); input=getchar(); stu_login();//进入学生登陆菜单 } else//存在的话循环读取文件中的信息直到文件指针到文件尾部 { do { fread(&courses[i],sizeof(struct course),1,fp); i=i+1; } while(!feof(fp)); fclose(fp);//文件读完后关闭 } printf(“nntt请输入你要选课程的编号:”); scanf(“%d”,&n); if((fp1=fopen(“courseselect.dat”,“rb”))==NULL) { fp1=fopen(“courseselect.dat”,“wb”); } else { fclose(fp1); fp1=fopen(“courseselect.dat”,“ab”); } for(j=0;j if(courses[j].c_num==n) flag++; if(flag==0) { printf(“nntt不存在对应课程n”); printf(“nntt继续选课请按1,退出请按2:n”); scanf(“%d”,&in); switch(in) { case 1:c_select();break; case 2:stu_login();break; default: printf(“输入错误,将返回登录界面!n”); login();break; } } else { fwrite(&courses[j],sizeof(struct course),1,fp1); fclose(fp1); printf(“nntt选课成功t请选择:”); printf(“nntt1.继续选课”); printf(“nntt2.退出,返回登录界面!”); scanf(“%d”,&in); switch(in) { case 1:c_select();break; case 2:stu_login();break; default:break; } } } void c_viewm()//课程浏览 { void stu_login(); void c_view(); int inp,i=0,n=0; FILE *fp; char input; struct course courseview[10]; if((fp=fopen(“course.dat”,“rb”))==NULL)//判断是否存在课程 { system(“cls”); printf(“nnnt课程不存在nn”); printf(“t<按任意键返回管理菜单>nt”); getchar();getchar(); stu_login();//进入学生登陆菜单 } else//存在的话循环读取文件中的信息直到文件指针到文件尾部 { do { fread(&courseview[i],sizeof(struct course),1,fp); i=i+1; } while(!feof(fp)); fclose(fp);//文件读完后关闭 do { system(“cls”); if(i==1) { printf(“nnnttt没有记录!n”); getchar();getchar(); man_login(); } else { printf(“nt------共有%d条记录-------”,i-1); printf(“nnt课程编号: %dn”,courseview[n].c_num); printf(“nnt课程名字: %sn”,courseview[n].c_name); printf(“nnt课程学分: %dn”,courseview[n].c_score); printf(“nnt课程已选人数: %dn”,courseview[n].c_nelepeo); printf(“nnt课程人数上限: %dn”,courseview[n].c_melepeo); printf(“nnt1.上一页t2.下一页t3.回目录”); printf(“n请选择:”); scanf(“%d”,&inp); switch(inp) { case 1: { if(n==0) { printf(“nt已到达首页 t按任意键返回”); input=getchar(); input=getchar(); } else { n=n-1; } break; } case 2: { if(n==i-2) { printf(“nt已到达尾页t按人意见返回”); input=getchar(); input=getchar(); } else { n=n+1; } break; } case 3:{man_login();break;} default: { printf(“nt操作错误t按任意键返回”); getchar();getchar(); break; } } } }while(inp!=3); } } void c_views()//课程浏览 { void stu_login(); void c_view(); int inp,i=0,n=0; FILE *fp; char input; struct course courseview[10]; if((fp=fopen(“course.dat”,“rb”))==NULL)//判断是否存在课程 { system(“cls”); printf(“nnnt课程不存在nn”); printf(“t<按任意键返回管理菜单>nt”); getchar();getchar(); stu_login();//进入学生登陆菜单 } else//存在的话循环读取文件中的信息直到文件指针到文件尾部 { do { fread(&courseview[i],sizeof(struct course),1,fp); i=i+1; } while(!feof(fp)); fclose(fp);//文件读完后关闭 do { system(“cls”); if(i==1) { printf(“nnnttt没有记录!n”); getchar();getchar(); stu_login(); } else { printf(“nt------共有%d条记录-------”,i-1); printf(“nnt课程编号: %dn”,courseview[n].c_num); printf(“nnt课程名字: %sn”,courseview[n].c_name); printf(“nnt课程学分: %dn”,courseview[n].c_score); printf(“nnt课程已选人数: %dn”,courseview[n].c_nelepeo); printf(“nnt课程人数上限: %dn”,courseview[n].c_melepeo); printf(“nnt1.上一页t2.下一页t3.回目录”); printf(“n请选择:”); scanf(“%d”,&inp); switch(inp) { case 1: { if(n==0) { printf(“nt已到达首页 t按任意键返回”); input=getchar(); input=getchar(); } else { n=n-1; } break; } case 2: { if(n==i-2) { printf(“nt已到达尾页t按人意见返回”); input=getchar(); input=getchar(); } else { n=n+1; } break; } case 3:{stu_login();break;} default: { printf(“nt操作错误t按任意键返回”); getchar();getchar(); break; } } } }while(inp!=3); } } void c_searchs(){ void stu_login(); void c_searchs(); int id,i=0,j,inp,k; int flag=0; FILE *fp; struct course coursesear[10]; if((fp=fopen(“course.dat”,“rb”))==NULL) //判断课程信息是否存在 { system(“cls”); printf(“nnt课程不存在t按任意键返回”); getchar();getchar(); stu_login(); } else//存在的话循环读取文件中的信息直到文件指针到文件尾部 { do { fread(&coursesear[i],sizeof(struct course),1,fp); i=i+1; }while(!feof(fp)); fclose(fp); } system(“cls”); printf(“nnttt请输入你要查询的课程编号:”); scanf(“%d”,&id); do//检查输入是否符合要求 { for(j=0;j { if(id==coursesear[j].c_num) { flag++; k=j; } } if(flag==1) { system(“cls”); printf(“nnt课程编号:%dn”,coursesear[k].c_num); printf(“nnt课程名字:%sn”,coursesear[k].c_name); printf(“nnt课程学分:%dn”,coursesear[k].c_score); printf(“nnt课程已选人数:%dn”,coursesear[k].c_nelepeo); printf(“nnt课程人数上限:%dn”,coursesear[k].c_melepeo); getchar();getchar(); printf(“nnt1.回目录继续查询t2.退出查询系统n”); printf(“请选择:”); scanf(“%d”,&inp); switch(inp) { case 1:c_searchs(); case 2:stu_login(); default: { printf(“nt没有这项服务t请按任意键重新输入”); getchar();getchar(); } } } else { system(“cls”); printf(“nnt不存在对应记录n”); printf(“nnt1.回目录继续查询t2.退出查询系统n”); printf(“请选择:”); scanf(“%d”,&inp); switch(inp) { case 1:c_searchs(); case 2:stu_login(); default: { printf(“nt没有这项服务t请按任意键重新输入”); getchar();getchar(); } } } }while(inp!=1); } void c_searchm(){ void stu_login(); void c_searchm(); int id,i=0,j,inp,k; int flag=0; FILE *fp; struct course coursesear[10]; if((fp=fopen(“course.dat”,“rb”))==NULL) //判断课程信息是否存在 { system(“cls”); printf(“nnt课程不存在t按任意键返回”); getchar();getchar(); stu_login(); } else//存在的话循环读取文件中的信息直到文件指针到文件尾部 { do { fread(&coursesear[i],sizeof(struct course),1,fp); i=i+1; }while(!feof(fp)); fclose(fp); } system(“cls”); printf(“nnttt请输入你要查询的课程编号:”); scanf(“%d”,&id); do//检查输入是否符合要求 { for(j=0;j { if(id==coursesear[j].c_num) { flag++; k=j; } } if(flag==1) { system(“cls”); printf(“nnt课程编号:%dn”,coursesear[k].c_num); printf(“nnt课程名字:%sn”,coursesear[k].c_name); printf(“nnt课程学分:%dn”,coursesear[k].c_score); printf(“nnt课程已选人数:%dn”,coursesear[k].c_nelepeo); printf(“nnt课程人数上限:%dn”,coursesear[k].c_melepeo); getchar();getchar(); printf(“nnt1.回目录继续查询t2.退出查询系统n”); printf(“请选择:”); scanf(“%d”,&inp); switch(inp) { case 1:c_searchm(); case 2:man_login(); default: { printf(“nt没有这项服务t请按任意键重新输入”); getchar();getchar(); } } } else { system(“cls”); printf(“nnt不存在对应记录n”); printf(“nnt1.回目录继续查询t2.退出查询系统n”); printf(“请选择:”); scanf(“%d”,&inp); switch(inp) { case 1:c_searchm(); case 2:man_login(); default: { printf(“nt没有这项服务t请按任意键重新输入”); getchar();getchar(); } } } }while(inp!=1);} void c_add()//增加课程 { void c_add(); void man_login(); int i=0,j,inp; FILE *fp; struct course course_new; struct course courses[10]; system(“cls”); printf(“nntt请输入课程信息”); printf(“nntt1.课程编号:”); scanf(“%d”,&course_new.c_num); printf(“nntt2.课程名字:”); scanf(“%s”,course_new.c_name); printf(“nntt3.课程学分:”); scanf(“%d”,&course_new.c_score); printf(“nntt4.课程已选人数:”); scanf(“%d”,&course_new.c_nelepeo); printf(“nntt5.课程人数上限:”); scanf(“%d”,&course_new.c_melepeo); if((fp=fopen(“course.dat”,“rb”))!=NULL) { do { fread(&courses[i],sizeof(struct course),1,fp); i=i+1; }while(!feof(fp)); fclose(fp); for(j=0;j<=i-1;j++) if(course_new.c_num==courses[j].c_num) { system(“cls”); printf(“nnttt对不起,这个编号已经使用过nntt按任意键返回管理菜单”); getchar();getchar(); man_login(); break; } } if((fp=fopen(“course.dat”,“rb”))==NULL) { fp=fopen(“course.dat”,“wb”); } else { fclose(fp); fp=fopen(“course.dat”,“ab”); } fwrite(&course_new,sizeof(struct course),1,fp); fclose(fp); printf(“nntt信息输入完毕t按任意键继续”); getchar();getchar(); do { system(“cls”); printf(“nntt1.继续输入”); printf(“nntt2.返回管理菜单”); printf(“nntt请选择”); scanf(“%d”,&inp); if(inp!=1&&inp!=2) { printf(“输入不符合要求t按任意键重新选择”); getchar();getchar(); } }while(inp!=1&&inp!=2); switch(inp) { case 1:c_add();break; case 2:man_login();break; } } void c_delete()//查询后删除 { FILE *fp; int i=0,j,n,k,flag=0; struct course courses[10]; void c_delete(); void man_login(); printf(“nntt请输入你要删除的课程编号:”); scanf(“%d”,&n); if((fp=fopen(“course.dat”,“rb”))!=NULL) { do { fread(&courses[i],sizeof(struct course),1,fp); i=i+1; }while(!feof(fp)); fclose(fp); } else { printf(“nntt不存在任何课程t按任意键返回”); getchar();getchar(); man_login(); } for(j=0;j { if(courses[j].c_num==n) { flag=1; fp=fopen(“course.dat”,“wb”); for(k=0;k fwrite(&courses[k],sizeof(struct course),1,fp); fclose(fp); fp=fopen(“course.dat”,“ab”); for(k=j+1;k { fwrite(&courses[k],sizeof(struct course),1,fp); } printf(“nntt记录已删除!t按任意键返回ntt”); getchar();getchar(); man_login(); fclose(fp); } } if(flag==0) { printf(“nntt不存在对应的课程t按任意键返回”); getchar();getchar(); man_login(); } // printf(“nntt记录已删除!t按任意键返回ntt”); } int main(){ index();login();return 0;} 1、课程设计的目的、任务 《汇编语言》课程设计对于巩固汇编语言理论知识,加强学生的实际动手能力和提高学生综合素质十分必要。课程设计的目的主要是通过程序设计方法和技能的基本训练,巩固在课堂上学到的有关程序设计的基本知识和基本方法,通过实际动手能力的培养,进一步熟悉汇编语言的结构和使用方法,达到能独立阅读、编制和调试一定规模的汇编语言程序的水平。 2、软件需求分析和设计 2.1学生成绩管理系统是对学生成绩的管理,其中包括以下几个模块:(1).插入一个数据(插入学生学号以及语数外三个成绩)。(2)修改一个数据。(3)删除学生成绩数据。(4)查找学生成绩。(5)查看学生成绩的排名(6)查看学生成绩分布(7)按esc键退出系统 2.2学生成绩管理系统应该包含以下信息:学号,语文成绩,英语成绩,数学成绩。因此,系统应该提供以下功能:(1)输出显示菜单。(2)输入学生的成绩(3)修改学生成绩(4)删除学生成绩(5)查询学生成绩(6)显示学生成绩排名(7)显示成绩分布统计(8)按esc键退出系统 2.3依据程序的功能需求,该系统的功能结构图如下 系统功能结构图 2.4 程序流程图: 主程序流程图 查找学生成绩 插入学生学号及成绩 修改学生的成绩 显示各个学科各分数段的人数 3、程序实现说明 3.1学生管理系统中各子程序如下: (1).输入全部学生学号以及语文,英语,数学三科的成绩。子程序名:insert 子程序描述:该子程序为输入字程序。系统在开始的时候是没有数据的,通过该子程序可以初始化系统,将学生的学号及成绩输入系统。 代码: insert proc near;定义进程子程序:插入学生,学号及 成绩 call input;调用input add n,1 ret insert endp (2).修改输入的成绩。子程序名:modify 子程序描述:通过子程序修改学生的成绩 代码: modify proc near;定义进程子程序:修改学生学号,成绩 md1:output mess1;输出mess1 shuru;调用宏shuru:二位数据输入 mov bl,n mov bh,0 mov al,dl mov si,0 md: cmp al,xh[si];先查找输入的学生是否存在 je qq1_1;查到的话,就跳转到qq1_1输入修改的值,也就是重新输入。;结果相等则跳转到qq1_1 add si,1 cmp si,bx jbe md;小于等于则跳转到md output mess;输出mess jmp md1;不相等继续输入学号 qq1_1:;转入修改的值重新输入。mov di,si output mess2 output mess4 mov si,0 mov cx,3 qq3_1:shuruu;cmp dx,78h; jbe qq2_1;output ts3;jmp qq1_1;qq2_1:mov buf[si],dl output bg;add si,1 loop qq3_1 mov al,buf[0];mov chi[di],al mov al,buf[1] 分别输入语文,英语,数学成绩,并将其放 在缓冲区buf中 比较输入的成绩是否大于120,如果大于120的 话,那么重 新输入成绩 小于等于则转移到qq2_1 输出ts3 跳转到qq1_1 输出空格 将存入buf中的成绩,分别赋值给存放对应科 目的成绩的数组 mov eng[di],al mov al,buf[2] mov mat[di],al ret modify endp (3).删除学生的成绩。子程序名:delete 子程序描述:通过子程序删除学生的成绩 代码: de proc near;删除某个学生的记录 sc1:output mess1 shuru;调用宏shuru,接受输入的学号 mov bl,n mov bh,0 mov al,dl mov si,0 sc: cmp al,xh[si];查询输入学号的学生信息是否存在,不存在的话,重新输入学号 je sc2;相等则转移到sc2 add si,1 cmp si,bx jbe sc;小于等于则转移到sc output mess;输出mess jmp sc1 sc2: sub bx,si cmp bx,0 je sc3;相等则转移到sc3 mov cx,bx sc4:mov dl,chi[si+1] mov chi[si],dl mov dl,eng[si+1] mov eng[si],dl mov dl,mat[si+1] mov mat[si],dl mov dl,xh[si+1] mov xh[si],dl add si,1 loop sc4;loop循环指令,执行操作(cx)<--(cx)-1.若 cx!=0,跳转到标号sc处循环执行;cx=0,则推出 循环,执行loop的下一条指令 sub n,1 sc3: ret de endp (3).查询学生的成绩。子程序名:find 子程序描述:通过子程序查询学生的成绩 代码: find proc near;定义进程子程序:查找学生成绩 call sum;求学生的总成绩 call ping;求学生的平均成绩 bj1:output mess1;输出mess1 shuru;二位数数据输入 mov bl,n mov bh,0 mov al,dl mov si,0 bj: cmp al,xh[si];将输入的学号与输入的学号相比,je i;存在的话,将此学生的成绩输出。je表示结果相 等则转移。add si,1 cmp si,bx jbe bj;output mess jmp bj1 i: output strr2 shuzi xh[si];shuzi output bg;mov al,chi[si] cbw;shuzii ax;shuzii output bg;mov al,eng[si] cbw;shuzii ax;shuzii output bg mov al,mat[si] cbw shuzii ax output bg; mov al,pj[si] cbw 小于等于则转移到bj 为二位数据输出 输出空格 将字节变为字 为三位数据输出。输出空格 将字节变为字 为三位数据输出 输出空格的字符串,用于与标题栏对齐 shuzii ax output bg mov ax,si mov bl,2 mul bl mov bx,ax shuzii zc[bx];shuzii为三位数据输出 output bg;输出空格的字符串,用于与标题栏对齐 shuzi mc[si];shuzi为二位数据输出 ret find endp (4).显示学生的成绩排名。子程序名:show 子程序描述:通过子程序显示学生的成绩排名 代码: show proc near;定义进程子程序:显示结果排名 call sum;调用宏sum call ping;调用宏ping call rank;调用宏rank call shuchu;调用宏shuchu ret show endp 3.2程序运行抓图: 主菜单 修改学生成绩 删除学生成绩 显示各个学科各分数段的人数 4、程序总结 通过两个星期的学习,努力,终于完成了报告。系统可以很好的运行。这两个多星期的时间,几乎每天不是在敲代码,就是在看代码,查书,上网。系统中用到了很多最近才学习的知识,比如宏,子程序。这些都使得代码的运行效率提高了,代码行数减少了。系统还用到了bios的清屏功能。这些功能如果不是做课程设计,我想我很难会接触到这些知识。 由于自己对知识掌握的不是很牢固,其中也会碰到一些困难。每当遇到问题的时候,我会先上网去查找,看看有没有人提过这方面的问题。互联网是强大的,大部分的问题通过网络都可以解决。部分找不到的问题,我就去请教班里学得好的同学。他们对知识的掌握远超过我。这样下来,很多问题都迎刃而解了。 课程设计是一个很好的掌握书本上知识的过程。平时上课之后,自己都不会想着去敲一些代码联系联系。通过做课程设计,将理论与实践结合了起来,对知识的理解更加深入了。 课程设计题目:简单的学生成绩管理的程序 要求: 一、由键盘输入原始数据。原始数据内容如下: 学号姓名C程序设计高等数学英语线性代数 1王..80808080 2张..90909090 注:要求至少有20个学生的原始数据 二、实现以下功能。 程序要求主函数是一个功能选择菜单,其它各功能用函数实现。功能要求如下: 1、原始数据的输入 2、计算每位同学的平均分 3、计算每门课程的平均分 4、计算各分数段(90-100、80-89、60-79、60以下)的人数 5、对这些同学的成绩按平均分排序,给出名次。 6、对原始数据可以进行增、删、改的编辑操作。 7、按学号查询学生。找到则显示该生信息,否则提示未找到。 8、原始数据可以保存为文件,也可以从文件载入。 注:程序统计输出结果如下: 学号姓名C程序设计高等数学英语线性代数平均分名次 1王..80808080802 2张..90909090901 … 各科平均分8585858585 C程序设计高等数学英语线性代数平均分 90-10011111 80-8911111 60-6900000 60以下00000第三篇:C语言课程设计学生选课系统
第四篇:语言课程设计-学生成绩管理系统
第五篇:C语言课程设计任务书(学生成绩管理系统)