C语言课程设计报告
——课程成绩管理系统
作者:
指导老师:
专业班级:物流0803 班
完成日期:20XX/11/1
1. 系统说明
1.1系统名称
课程成绩管理系统
1.2 系统开发背景
(1)开发人员:组长
组员
(2)开发时间:第三周至第八周
(3)开发环境:Borland C++ V 3.1
(4)总代码量:约2100行
1.3系统开发进程
(1)第三周至第四周:进行初步系统分析,讨论分析开发所需的C语言知识,并开始自学高级编程技术的相关知识
(2)第五周:详细分析系统,划分系统模块,分配开发任务,规划工程文件建立工程。
(3)第六周:开始进行函数编写,初步完成界面及菜单的函数编写,并实现创建用户登陆成功。
(4)第七周:初步完成管理员功能模块及普通用户功能模块,并进一步调试界面及菜单函数。
(5)第八周:基本完成系统所有函数的编写,代码的最后整合和测试修改。
(6)第九周:实现汉化功能,测试修改代码,并开始撰写设计报告。
1.4 C课程设计体会心得
杜景(组长):
跟大部分人一样,在做课程设计之前,我是感到有点害怕的,担心以自己上学期学习的那一点C语言知识,来完成这次的课程设计几乎是不可能。那天晚上分组选题时,我找了同寝室的一个哥们,为了便于以后变成是好交流。其实我们当时对那些选题都不大了解,其他人都选得差不多了,我看到课程成绩管理系统还空着,于是就选了它。
选完题后,我们还是心里没底。于是我们找来了一个大二的学长,咨询了相关C语言编程的相关事项,他鼓励我们自学一些高级编程知识,然后试着编写、调试,开始感觉到困难是正常的,不过随着知识的增长,不断的学习调试技巧,会越来越觉得简单的。学长的一席话让我们茅塞顿开,带着那一份自信,我和刘俊开始了我们“编程之旅”。
起初我们在网上找了一些资料,下载了一本《C语言高级编程》,就开始恶补编程知识。信息的存储,图形方式下输入、输出,弹出式菜单制作,文件的相关知识……,我们分配了一下任务,“枯燥”的自学就开始了。
在编写程序过程中,我们遇到了许许多多的问题。令我记忆最为深刻的是编写login()函数时,单独调试可以运行,但是一放到整个程序里,问题就出现了。我已经初始化了一个账号和密码,但用这个账号和密码登陆却怎么也进不去。起初我们想到可能是login()函数的问题,找了很久发现没有问题。有联系整个程序还是没有查出问题。因为我们是把用户信息保存在一个文件里面,登陆时显示可以打开文件,但是显示账号或密码错误,这就让我们百思不得其解了,整整一天都没有看出问题。第二天我们去了南一楼问助教,助教调试了程序,刚开始也没找出原因,后来在看代码的时候突然发现存放用户信息的结构体里参数的位置好像颠倒了,改过来后,程序终于能运行了。通过那次的调试,我发现编程时可能发生很多的小错误不易察觉,这就需要我们有良好的编程习惯以及程序的整体观。
随着验收的日子一天一天临近,我们的程序也越来越完整。后面的汉化模块实现以及界面的优化问题不是很大,我们很好的实现了。到现在,我们的程序已经实现了基本的功能,运行过程基本上不存在Bug了。看着自己花了时间和精力编写的程序能完整的运行时,一种成就感油然而生,且不说程序做得如何,至少我们尽了自己的努力,克服了许多困难,才有现在的结果。在这期间,我的C语言编程能力得到了很大的提高,也是我对C由敬畏转变为兴趣,我相信这段经历将对我日后的学习和工作是非常有价值的。
刘俊:
通过这次课设,我的感想很多,不仅仅是C语言方面的……
先就本次课设谈谈自己对于这次课设的想法,必须承认的是,我们这次选的课题相比于其他组来说是由些简单的,尤其是在算法方面,而我恰好负责的是算法部分。但从整个过程来看,我仍然遇到了很多的问题,也因此浪费了很多的时间和心血。在开始动手编写程序之前,我参考了很多书籍,但发现他们的算法很多都是用比C语言更高级的语言编写的,如C#,C++等等,尤其是其中用到了大量的指针。仅仅在大一学习了一年的C语言,对于较高级的语言并没有太多的了解,对于指针的使用也是相当谨慎小心的。所以思考再三,还是决定用最基本的算法,主要利用结构体和文件操作来实现用户和学生信息的创建,添加,删除,修改,查询,浏览等要求。文件操作,起初对于我来说还是比较陌生的,但随着程序编写的进一步深入,对于几个常见的文件操作函数,也越来越熟悉了。虽然算法简单,但同样遇到了很多的问题,就拿管理用户和管理学生两个比较大的.cpp 文件来说,其实,这两个模块是很相似的,它们有基本相同的功能要求,比如创建,添加,删除,修改,查询,浏览等,比较明显的区别是定义的用户和学生两个结构体中成员项的数目,struct user 中只有四个成员项,而 struct student 中却总共有十二个成员项,从理论上来讲,只要把管理用户的函数写好了,管理学生的函数很大程度上可以仿照管理用户的函数,但实际操作起来却并没有这样简单。比如说,在创建用户时,我一次性可以创建五六个用户,但是在管理学生函数里面,如果一次性输入五六个学生信息后,就会发生“死机”,起初我很不解,搞了很长时间,但都没有什么用,后来在一本资料上看文件操作的有关内容时,才突然间发现,原来是和文件缓冲区的大小有关,在对文件进行写入时,如果文件缓冲区中的内容超过了512k时,还没有写入文件并关闭文件的话,就会发生死机的现象。也正是这个原因,造成了我们这个程序的一个小小的缺陷,也就是说,每次向文件中写入信息时,必须要保证在缓冲区满之前将信息写入指定的文件中。后来在数据结构课上,学习了线性表,才发现如果采用链表进行算法设计的话,可以节省很多代码,只是当时我们的程序已经写了多半,还有对链表的用法也不是很熟,所以就放弃了改用链表的想法,继续坚持我们自己的算法设计。总之,在整个程序设计中,我们遇到的问题还有很多,比如登陆不进系统的问题就困扰了我们两天。限于篇幅,仅仅举这几个例子说明一下。
这次课设是以两人为一组的,目的也很清楚,培养大家的协作能力。我和我的同伴杜景的分工从一开始就很明确,我算法,他界面,六个字,很简洁很明确,我们也一直是按照这样的分工进行课程设计的。期间我们也从曾就某些问题有过不同的意见,但后来经过协商之后,都统一了所有的观点。整个课设作完之后,从工作量上来看,他的工作量其实比我的还要大一些,因为他不仅要做界面的美化工作,还要把我的算法部分的实现各个功能的小函数通过一系列的连接函数,将它们连接起来,使得整个工程能够成功运行下去,另外,后期的设计报告的绝大部分也主要是由他来完成的,所以我觉得这次课设的大部分功劳都应该属于他。
总而言之,这次课设不仅让我对C语言有了更深入的了解,同时对于一个软件系统的开发有了更真切的体会。
1.5参考资料
(1) 王士元. C高级实用程序设计. 北京: 清华大学出版社. 1996
(2) 周纯杰,刘正林等. 标准C语言程序及应用. 武汉: 华中科技大学出版社. 2005
(3) 潭浩强. C语言程序设计. 北京: 清华大学出版社, 2000
(4) 姚远. 高级C语言程序设计技巧与实例. 北京: 机械工业出版社, 1995
(5) 陈清华, 朱红. C语言课程设计. 南京: 东南大学出版社, 2003
2.总体设计及说明
2.1 系统需求分析
随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。管理信息系统是一个不断发展的新型学科,任何一个单位要生存要发展,要高效率地把内部活动有机地组织起来,就必须建立与自身特点相适应的管理信息系统。
立足于本校,基于对学校HUB成绩信息管理系统的分析,我们组创建了一个行之有效的计算机管理学生课程成绩的方案——课程成绩管理系统来帮助老师和学生更好地掌握相关信息。
本系统要实现的功能有:
管理员模块:
能对系统用户信息(用户编号,用户密码,用户名,用户权限)进行录入、添加、删除、修改、查询、浏览。
能对学生的基本信息(姓名、编号、年级、院系、专业、成绩)进行日常维护(录入、添加、删除、修改、查询、浏览等功能)。
学生模块:
能对学生的基本信息(姓名、编号、年级、院系、专业、成绩)进行查询、浏览。
2.2 系统分析及说明
本系统为用户提供了简单的图形菜单和键盘操作,用户输入账号及密码进行登陆,系统自动判断用户的使用权限,并提供其使用权限范围内的系统功能。用户的权限有管理员和普通用户两类。管理员拥有管理用户信息及管理学生信息的权利,普通用户拥有查找和浏览学生信息的权利。
进入系统后首先看到是欢迎界面,继而是程序的一些简单介绍。接着是登陆界面,选择登陆后,输入账号及密码进行登陆,登陆成功后即进入到相应权限内的菜单界面,进而进行相关操作。
2.3 结构设计及说明
本系统用了两个结构体来分别存放用户及学生信息。
(1).存放用户信息的结构体,包括编号、账号、密码、权限
struct user
{
long num;
char name[10];
char password[10];
int power;
};
(2).存放学生信息的结构体,包括编号、姓名、院系、专业、年级、语文成绩、英语成绩、数学成绩、物理成绩、C语言成绩、各科总分、平均分
struct student
{
char num[11];
char name[10];
char department[40];
char major[40];
char grade[20];
char chinese[10];
char english[10];
char math[10];
char physics[10];
char c_language[10];
char sum[10];
char average[10];
};
2.4模块设计及说明
(1)总体模块
①管理员模块
②普通用户模块
(2)管理员模块
①管理用户信息模块
②管理学生信息模块
(3)管理用户信息模块
①创建用户信息
②添加用户信息
③删除用户信息
④修改用户信息
⑤查找用户信息
⑥浏览用户信息
(4)管理学生信息模块
①创建学生信息
②添加学生信息
③删除学生信息
④修改学生信息
⑤查找学生信息
⑥浏览学生信息
(5)普通用户模块模块
①查找学生信息
②浏览学生信息
3.详细设计及说明
3.1 模块流程图
(1)模块图
(1)流程图
Ⅰ 系统主流程图
Ⅱ 管理员流程图
Ⅲ 学生流程图
3.2 函数设计及说明
(1)界面及菜单设计
void huanying(); /*欢迎界面*/
void jianjie(); /*软件说明*/
void Interface(); /*进入界面*/
void jieshao(); /*程序名称*/
void end(); /*结束界面*/
void Entering_Menu() /*登陆菜单*/
void Admin_Menu(); /*管理员功能菜单*/
void Student_Menu(); /*学生功能菜单*/
void Adminuser_Menu(); /*管理用户功能菜单*/
void Adminstu_Menu(); /*管理学生功能菜单*/
(2)选择菜单设计
int Choose_Entering_Menu(); /*选择登陆菜单*/
int Choose_Admin_Menu(); /*选择管理员功能*/
int Choose_Student_Menu(); /*选择学生功能*/
int Choose_Adminuser_Menu();/*选择管理用户功能*/
int Choose_Adminstu_Menu(); /*选择管理学生功能*/
(3)管理用户函数设计
void createuser(); /*创建用户信息*/
void adduser(); /*添加用户信息*/
void deluser(); /*删除用户信息*/
void modifyuser(); /*修改用户信息*/
void scanuser(); /*浏览用户信息*/
void searchuser(); /*查找用户信息*/
void display1(); /*显示用户信息*/
(4)管理用户函数设计
void createstudent(); /*创建学生信息*/
void delete_name(); /*删除学生信息*/
void addstudent(); /*添加学生信息*/
void search_name(); /*查找学生信息*/
void modify_name(); /*修改学生信息*/
void scan_sum(); /*修改学生信息*/
void display2(); /*显示学生信息*/
(5)各主要函数设计
void main(); /*主函数*/
void admin(); /*管理员函数*/
void student1(); /*学生函数*/
void adminuser(); /*管理用户函数*/
void adminstu(); /*管理学生函数*/
void Choice(int c_x,int c_y,int color);
/*选择光标函数*/
int login(); /*登陆函数*/
float sub(float x1,float x2,float x3,float x4,float x5);
/*求和函数*/
void hanzi16(int x,int y,int color,int LINE,int ROW,char *hz);
/*汉字显示函数*/
附:工作量说明
组长:杜景
主要负责系统分析和系统设计,界面及菜单设计,选择菜单设计和各主要函数设计。编写的源程序文件是
Head.h, main.cpp, huangying.cpp, hanzi.cpp, input.cpp, choice.cpp, login1.cpp, menu.cpp, jiemian.cpp, end.cpp, student.cpp, admin.cpp
共约1000行。
组员:刘俊
主要负责管理用户及管理学生具体功能的实现,编写的源程序文件是 adminuser.cpp, adminstudent.cpp
共约900行。
C程序源代码
/************头文件“head.h”************/
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#include"conio.h"
#include"graphics.h"
#include"bios.h"
#include"dos.h"
#define SIZE 10;
#define Esc 27;
#define Enter 13;
#define Backspace 8;
#define UpKey 72
#define DownKey 80
#define MX 250
#define MY 100
#define MW 150
#define MH 25
#define CX MX+20
#define CY MY+5
#define CW 110
#define CH 15
#define LUJING "D:\\borlandc\\bgi"
#define userdatafile "F:\\user.dat"
#define studentfile "F:\\student.dat"
struct student
{
char num[11];
char name[10];
char department[40];
char major[40];
char grade[20];
char chinese[10];
char english[10];
char math[10];
char physics[10];
char c_language[10];
char sum[10];
char average[10];
};
struct user
{
long num;
char name[10];
char password[10];
int power;
};
void huanying();
void jianjie();
void Interface();
void jieshao();
void end();
void Entering_Menu();
void admin();
void student1();
void adminuser();
void adminstu();
void Admin_Menu();
void Student_Menu();
void Adminuser_Menu();
void Adminstu_Menu();
void Choice(int c_x,int c_y,int color);
int Choose_Entering_Menu();
int Choose_Admin_Menu();
int Choose_Student_Menu();
int Choose_Adminuser_Menu();
int Choose_Adminstu_Menu();
int login();
void createstudent();
void delete_name();
void addstudent();
void search_name();
void modify_name();
void scan_sum();
void input(int x,int y,char *str);
float sub(float x1,float x2,float x3,float x4,float x5);
void hanzi16(int x,int y,int color,int LINE,int ROW,char *hz);
void createuser();
void adduser();
void deluser();
void modifyuser();
void scanuser();
void searchuser();
void display1();
void display2();
/*********************************************************/
/******************* 主函数 main **********************/
#include"Head.h"
void main()
{
int gd=DETECT,gm;
int c_x,c_y,result;
int powerflag;
initgraph(&gd,&gm,"d:\\borlandc\\bgi");
c_x=CX;
c_y=CY;
cleardevice();
huanying();
jianjie();
cleardevice();
setbkcolor(LIGHTCYAN);
jieshao();
Interface();
Choice(c_x,c_y,RED);
Entering_Menu();
result= Choose_Entering_Menu();
switch(result)
{
case 27:
exit(0);
break;
case CY:
powerflag=login();
if(powerflag)
{
admin();
}
else
{
student1();
}
break;
case CY+MH:
end();
exit(0);
default:break;
}
closegraph();
}
/**********************************************************/
/*************欢迎函数 huanying****************************/
void huanying()
{
int i;
int sx[62];
int snownum=0;/*雪的个数*/
int size;/*保存区域的大小*/
int change=10;/*变颜色有关*/
void *get1,*get2;/*保存空间*/
struct Snow/*雪的一些参数*/
{
int x;
int y;
int speed;
}snow[100];
setcolor(0);
setfillstyle(SOLID_FILL,15);
fillellipse(200,200,4,4);
size=imagesize(196,196,204,204);
get1=malloc(size);
get2=malloc(size);
getimage(196,196,204,204,get1);
getimage(96,96,104,104,get2);
randomize();
for(i=0;i<62;i++)
sx[i]=(i+2)*10;
cleardevice();
while(!kbhit())
{
hanzi16(278,160,change/10,1,2,"欢迎进入");
hanzi16(246,230,change/10,1,2,"课程成绩管理系统");
hanzi16(360,300,change/10,1,2,"——");
hanzi16(400,300,change/10,1,2,"杜景");
hanzi16(443,300,change/10,1,2,"刘俊");
if(snownum!=100)
{
snow[snownum].speed=2+random(5);
i=random(62);
snow[snownum].x=sx[i];
snow[snownum].y=10-random(100);
}
for(i=0;i
putimage(snow[i].x,snow[i].y,get2,COPY_PUT);
if(snownum!=100)
snownum++;
setfillstyle(SOLID_FILL,15);/*画雪*/
for(i=0;i
{
snow[i].y+=snow[i].speed;
putimage(snow[i].x,snow[i].y,get1,COPY_PUT);
if(snow[i].y>500)
snow[i].y=10-random(200);
}
change++;
if(change==140)/*和颜色的变化有关*/
change=10;
}
getch();
}
/*******************************************************/
/****************界面函数 jiemian************************/
#include"Head.h"
void Interface()
{
int i,j;
setcolor(GREEN);
for(i=0;i<25;i++)
{
line(i,0,i,500);
line((getmaxx()-i),0,(getmaxx()-i),500);
}
setcolor(YELLOW);
for(i=25,j=0;i<47;i++,j++)
{
line(i,j,i,(getmaxy()-j));
line((getmaxx()-i),j,(getmaxx()-i),(getmaxy()-j));
}
}
void jianjie()
{
cleardevice();
setbkcolor(LIGHTCYAN);
setcolor(BROWN);
while(!kbhit())
{
hanzi16(280,70,RED,1,2,"软件简介");
delay(200);
hanzi16(32,120,BLUE,1,1,"管理员模块:");
hanzi16(145,120,GREEN,1,1,"管理用户");
hanzi16(145,145,BROWN,1,1,"选择管理用户权限后,键入");
outtextxy(338,149,"[ENTER]");
hanzi16(400,145,BROWN,1,1,"进入权限菜单,键入");
outtextxy(145,174,"[UP]/[DOWN]");
hanzi16(240,170,BROWN,1,1,"实现功能的转换,键入");
outtextxy(400,174,"[ENTER]");
hanzi16(460,170,BROWN,1,1,"对用户信息");
hanzi16(145,195,BROWN,1,1,"进行创建、添加,删除、修改、浏览、查询等操作");
hanzi16(145,220,GREEN,1,1,"管理学生");
hanzi16(145,245,BROWN,1,1,"选择管理学生权限后,键入");
outtextxy(338,249,"[ENTER]");
hanzi16(400,245,BROWN,1,1,"进入权限菜单,键入");
outtextxy(145,274,"[UP]/[DOWN]");
hanzi16(240,270,BROWN,1,1,"实现功能的转换,键入");
outtextxy(400,274,"[ENTER]");
hanzi16(460,270,BROWN,1,1,"对学生信息");
hanzi16(145,295,BROWN,1,1,"进行创建、添加、删除、修改、浏览、查询等操作");
hanzi16(32,335,BLUE,1,1,"学生模块:");
hanzi16(145,335,BROWN,1,1,"以学生身份登陆进入系统后,键入");
outtextxy(384,339,"[ENTER]");
hanzi16(440,335,BROWN,1,1,"对学生信息进行");
hanzi16(145,360,BROWN,1,1,"浏览、查询等操作");
hanzi16(450,400,RED,1,1,"按任意键进入");
}
getch();
}
void jieshao()
{
bar3d(70,100,90,340,10,1);
floodfill(80,200,WHITE);
hanzi16(72,120,RED,1,1,"课");
hanzi16(72,120+MH,RED,1,1,"程");
hanzi16(72,120+2*MH,RED,1,1,"成");
hanzi16(72,120+3*MH,RED,1,1,"绩");
hanzi16(72,120+4*MH,RED,1,1,"管");
hanzi16(72,120+5*MH,RED,1,1,"理");
hanzi16(72,120+6*MH,RED,1,1,"系");
hanzi16(72,120+7*MH,RED,1,1,"统");
}
/******************************************************/
/******************输入函数 input**********************/
#include"Head.h"
void input(int x,int y,char *string)
{
int i=0;
char c;
do
{
kbhit();
c=getch();
if(c==8) //若键入退格键"Backspace"
{
if(i!=0)
{
i--;
setcolor(11);
settextstyle(0,0,1);
outtextxy(x,y,string);
string[i]='\0';
setcolor(BLUE);
outtextxy(x,y,string);
}
}
else if(c==13)
{
break;
}
else //正常标准键入
{
string[i]=c;
string[i+1]='\0';
setcolor(BLUE);
settextstyle(0,0,1);
outtextxy(x,y,string);
i++;
}
}while(c!=13);
}
/*****************************************************/
/******************汉字函数 hanzi********************/
#include"Head.h"
void hanzi16(int x,int y,int color,int LINE,int ROW,char *hz)
{
unsigned long offset;
char buffer[32];
int m,n,i,j,k;
unsigned char qh,wh;
FILE *fp;
if ((fp=fopen("hzk16","rb"))==NULL)
{
printf("Can't open hanzi,Please add it");
exit(1);
}
while(*hz)
{
qh=*(hz)-0xa0; /*得到区号*/
wh=*(hz+1)-0xa0; /*得到位号*/
offset=(94*(qh-1)+(wh-1))*32L; /*得到偏移位置*/
fseek(fp,offset,SEEK_SET); /*移文件指针到要读取的汉字字模处*/
fread(buffer,32,1,fp); /*读取32个汉字的汉字字模*/
for(i=0;i<16;i++) /*16点阵有16行*/
{
for(n=0;n
{
for(j=0;j<2;j++)/*每行有2个字节*/
{
for(k=0;k<8;k++)/*测试字节的位*/
{
for(m=0;m
{
if(((buffer[i*2+j]>>(7-k))&0x1)!=NULL)
{
putpixel(x+8*j*LINE+k*LINE+m,y+i*ROW+n,color);
}
}
}
}
}
}
hz+=2;
x+=16*LINE;
}
fclose(fp);
}
/*********************************************************/
/********************菜单函数 menu **********************/
#include"Head.h"
void Entering_Menu()
{
char *str1="登陆";
char *str2="退出";
setcolor(WHITE);
rectangle(MX,MY,MX+MW,MY+2*MH);
line(MX,MY+MH,MX+MW,MY+MH);
hanzi16(MX+50,MY+7,WHITE,1,1,str1);
hanzi16(MX+50,MY+MH+7,WHITE,1,1,str2);
}
void Admin_Menu()
{
char *str1="管理用户",*str2="管理学生";
char *str3="退出";
setbkcolor(LIGHTCYAN);
setcolor(WHITE);
rectangle(MX,MY,MX+MW,MY+3*MH);
line(MX,MY+MH,MX+MW,MY+MH);
line(MX,MY+2*MH,MX+MW,MY+2*MH);
hanzi16(MX+40,MY+7,WHITE,1,1,str1);
hanzi16(MX+40,MY+MH+7,WHITE,1,1,str2);
hanzi16(MX+52,MY+2*MH+7,WHITE,1,1,str3);
}
void Student_Menu()
{
setbkcolor(LIGHTCYAN);
setcolor(WHITE);
rectangle(MX,MY,MX+MW,MY+3*MH);
line(MX,MY+MH,MX+MW,MY+MH);
line(MX,MY+2*MH,MX+MW,MY+2*MH);
hanzi16(MX+52,MY+7,WHITE,1,1,"查找");
hanzi16(MX+52,MY+MH+7,WHITE,1,1,"浏览");
hanzi16(MX+52,MY+2*MH+7,WHITE,1,1,"退出");
}
void Adminuser_Menu()
{
char *str1="创建用户",*str2="添加用户",*str3="删除用户";
char *str4="修改用户",*str5="查找用户",*str6="浏览用户";
char *str7="退出";
setbkcolor(LIGHTCYAN);
setcolor(WHITE);
rectangle(MX,MY,MX+MW,MY+7*MH);
line(MX,MY+MH,MX+MW,MY+MH);
line(MX,MY+2*MH,MX+MW,MY+2*MH);
line(MX,MY+3*MH,MX+MW,MY+3*MH);
line(MX,MY+4*MH,MX+MW,MY+4*MH);
line(MX,MY+5*MH,MX+MW,MY+5*MH);
line(MX,MY+6*MH,MX+MW,MY+6*MH);
line(MX,MY+7*MH,MX+MW,MY+7*MH);
hanzi16(MX+40,MY+7,BLUE,1,1,str1);
hanzi16(MX+40,MY+MH+7,BLUE,1,1,str2);
hanzi16(MX+40,MY+2*MH+7,BLUE,1,1,str3);
hanzi16(MX+40,MY+3*MH+7,BLUE,1,1,str4);
hanzi16(MX+40,MY+4*MH+7,BLUE,1,1,str5);
hanzi16(MX+40,MY+5*MH+7,BLUE,1,1,str6);
hanzi16(MX+52,MY+6*MH+7,BLUE,1,1,str7);
}
void Adminstu_Menu()
{
char *str1="创建学生",*str2="添加学生",*str3="删除学生";
char *str4="查找";
char *str5="修改";
char *str6="浏览";
char *str7="退出";
setbkcolor(LIGHTCYAN);
setcolor(WHITE);
rectangle(MX,MY,MX+MW,MY+7*MH);
line(MX,MY+MH,MX+MW,MY+MH);
line(MX,MY+2*MH,MX+MW,MY+2*MH);
line(MX,MY+3*MH,MX+MW,MY+3*MH);
line(MX,MY+4*MH,MX+MW,MY+4*MH);
line(MX,MY+5*MH,MX+MW,MY+5*MH);
line(MX,MY+6*MH,MX+MW,MY+6*MH);
line(MX,MY+7*MH,MX+MW,MY+7*MH);
hanzi16(MX+40,MY+7,BLUE,1,1,str1);
hanzi16(MX+40,MY+MH+7,BLUE,1,1,str2);
hanzi16(MX+40,MY+2*MH+7,BLUE,1,1,str3);
hanzi16(MX+52,MY+3*MH+7,BLUE,1,1,str4);
hanzi16(MX+52,MY+4*MH+7,BLUE,1,1,str5);
hanzi16(MX+52,MY+5*MH+7,BLUE,1,1,str6);
hanzi16(MX+52,MY+6*MH+7,BLUE,1,1,str7);
}
/**********************************************************/
/******************选择光标函数 choice*********************/
#include"Head.h"
void Choice(int c_x,int c_y,int color)
{
setfillstyle(1,color);
bar(c_x,c_y,c_x+CW,c_y+CH);
}
/*选择登陆菜单*/
int Choose_Entering_Menu()
{
int x,y;
int C_Key;
x=CX;
y=CY;
do
{
kbhit();
C_Key=getch();
if(C_Key==27)
{
return Esc;
}
else
if(C_Key==13)
{
return y;
}
else
{
switch(C_Key)
{
case UpKey:
if(y==CY)
{
break;
}
else
{
Choice(x,y,11);
y-=MH;
Choice(x,y,RED);
Entering_Menu();
}
break;
case DownKey:
if(y==(CY+MH))
{
break;
}
else
{
Choice(x,y,11);
y+=MH;
Choice(x,y,RED);
Entering_Menu();
}
break;
default:
break;
}
}
} while( C_Key!=27);
return(0);
}
/*选择管理菜单*/
int Choose_Admin_Menu()
{
int x,y;
int C_Key;
x=CX;
y=CY;
do
{
kbhit();
C_Key=getch();
if(C_Key==27)
{
return Esc;
}
else
if(C_Key==13)
{
return y;
}
else
{
switch(C_Key)
{
case UpKey:
if(y==CY)
{
break;
}
else
{
Choice(x,y,11);
y-=MH;
Choice(x,y,RED);
Admin_Menu();
}
break;
case DownKey:
if(y==(CY+2*MH))
{
break;
}
else
{
Choice(x,y,11);
y+=MH;
Choice(x,y,RED);
Admin_Menu();
}
break;
default:
break;
}
}
} while( C_Key!=27);
return(0);
}
/*选择学生模块菜单*/
int Choose_Student_Menu()
{
int x,y;
int C_Key;
x=CX;
y=CY;
do
{
kbhit();
C_Key=getch();
if(C_Key==27)
{
return Esc;
}
else
if(C_Key==13)
{
return y;
}
else
{
switch(C_Key)
{
case UpKey:
if(y==CY)
{
break;
}
else
{
Choice(x,y,11);
y-=MH;
Choice(x,y,RED);
Student_Menu();
}
break;
case DownKey:
if(y==(CY+2*MH))
{
break;
}
else
{
Choice(x,y,11);
y+=MH;
Choice(x,y,RED);
Student_Menu();
}
break;
default:
break;
}
}
} while( C_Key!=27);
return(0);
}
/*选择管理用户菜单*/
int Choose_Adminuser_Menu()
{
int x,y;
int C_Key;
x=CX;
y=CY;
do
{
kbhit();
C_Key=getch();
if(C_Key==27)
{
return Esc;
}
else
if(C_Key==13)
{
return y;
}
else
{
switch(C_Key)
{
case UpKey:
if(y==CY)
{
break;
}
else
{
Choice(x,y,11);
y-=MH;
Choice(x,y,RED);
Adminuser_Menu();
}
break;
case DownKey:
if(y==(CY+6*MH))
{
break;
}
else
{
Choice(x,y,11);
y+=MH;
Choice(x,y,RED);
Adminuser_Menu();
}
break;
default:
break;
}
}
} while( C_Key!=27);
return(0);
}
/*选择管理学生菜单*/
int Choose_Adminstu_Menu()
{
int x,y;
int C_Key;
x=CX;
y=CY;
do
{
kbhit();
C_Key=getch();
if(C_Key==27)
{
return Esc;
}
else
if(C_Key==13)
{
return y;
}
else
{
switch(C_Key)
{
case UpKey:
if(y==CY)
{
break;
}
else
{
Choice(x,y,11);
y-=MH;
Choice(x,y,RED);
Adminstu_Menu();
}
break;
case DownKey:
if(y==(CY+6*MH))
{
break;
}
else
{
Choice(x,y,11);
y+=MH;
Choice(x,y,RED);
Adminstu_Menu();
}
break;
default:
break;
}
}
} while( C_Key!=27);
return(0);
}
/**********************************************************/
/********************登陆函数login*************************/
#include"Head.h"
int login()
{
relogin:
char *str;
int power1;
FILE *fp;
user s[10];
char *username,*password;
int i=0,j;
int flag=0;
char next;
cleardevice();
setbkcolor(11);
if((fp=fopen(userdatafile,"rb"))==NULL)
{
outtextxy(50,20,"open file fail!press any key !");
getch();
exit(1);
}
while(fread(&s[i],sizeof(user),1,fp)!=(int)NULL)
{
i++;
}
hanzi16(180,50,YELLOW,2,2,"课程成绩管理系统");
hanzi16(250,110,GREEN,1,1,"请输入账号和密码");
hanzi16(250,160,BLUE,1,1,"账号");
hanzi16(400,160,RED,1,1,"按");
setcolor(RED);
outtextxy(419,164,"ENTER");
hanzi16(460,160,RED,1,1,"继续");
input(320,163,username);
hanzi16(250,210,BLUE,1,1,"密码");
input(320,213,password);
for(j=0;j
{
if((strcmp(s[j].name,username)==0)&&(strcmp(s[j].password,password)==0))
{
flag=1;
power1=s[j].power;
break;
}
}
if(flag)
{
hanzi16(280,300,RED,1,1,"登陆成功!");
getch();
return power1;
}
else
{
outtextxy(200,300,"Login fail! Your name or password is wrong!");
outtextxy(200,330,"Do you want to try again?(y/n)");
next=getch();
if(next=='y'||next=='Y')
{
goto relogin;
}
else
{
end();
exit(0);
}
return(0);
}
}
/**********************************************************/
/*********************结束函数 end*************************/
#include"Head.h"
void end()
{
int i;
setbkcolor(LIGHTCYAN);
for(i=0;i<11;i++)
{
cleardevice();
hanzi16(i*20,200,i+2,2,2,"谢谢使用!");
delay(250);
}
}
/**********************************************************/
/*****************管理员函数 admin***********************/
#include"Head.h"
void admin()
{
again0:
int c_x,c_y,result;
char ch;
c_x=CX;
c_y=CY;
cleardevice();
Interface();
Choice(c_x,c_y,4);
Admin_Menu();
result= Choose_Admin_Menu();
switch(result)
{
case 27:
exit(0);
break;
case CY:
case CY+MH:
if(result==CY)
{
adminuser();
}
else
{
adminstu();
}
cleardevice;
setbkcolor(LIGHTCYAN);
hanzi16(200,200,BLUE,1,1,"返回菜单");
setcolor(4);
settextstyle(0,0,1);
outtextxy(300,205,"(y/n)");
ch=getch();
if(ch=='y'||ch=='Y')
{
goto again0;
}
else if(ch=='n'||ch=='N')
break;
case CY+2*MH:{
end();
exit(0);
}
default:break;
}
}
void adminuser()
{
again1:
int c_x,c_y,result=0;
char ch;
c_x=CX;
c_y=CY;
cleardevice();
Interface();
Choice(c_x,c_y,4);
Adminuser_Menu();
result=Choose_Adminuser_Menu();
switch(result)
{
case 27:
exit(0);
break;
case CY:
case CY+MH:
case CY+2*MH:
case CY+3*MH:
case CY+4*MH:
case CY+5*MH:
if(result==CY)
{
createuser();
}
else if(result==CY+MH)
{
adduser();
}
else if(result==CY+2*MH)
{
deluser();
}
else if(result==CY+3*MH)
{
modifyuser();
}
else if(result==CY+4*MH)
{
searchuser();
}
else
{
scanuser();
}
cleardevice();
setbkcolor(LIGHTCYAN);
hanzi16(200,200,BLUE,1,1,"返回菜单");
setcolor(4);
settextstyle(0,0,1);
outtextxy(300,205,"(y/n)");
ch=getch();
if(ch=='y'||ch=='Y')
{
goto again1;
}
else if(ch=='n'||ch=='N')
{
break;
}
case CY+6*MH:
{
cleardevice();
setbkcolor(LIGHTCYAN);
hanzi16(200,200,BLUE,1,1,"返回主菜单");
setcolor(4);
settextstyle(0,0,1);
outtextxy(300,205,"(y/n)");
ch=getch();
if(ch=='y'||ch=='Y')
{
admin();
}
else if(ch=='n'||ch=='N')
{
end();
exit(0);
} }
default:break;
}
}
void adminstu()
{
again2:
int c_x,c_y,result;
char ch;
c_x=CX;
c_y=CY;
cleardevice();
Interface();
Choice(c_x,c_y,4);
Adminstu_Menu();
result= Choose_Adminstu_Menu();
switch(result)
{
case 27:
exit(0);
break;
case CY:
case CY+MH:
case CY+2*MH:
case CY+3*MH:
case CY+4*MH:
case CY+5*MH:
if(result==CY)
{
createstudent();
}
else if(result==CY+MH)
{
addstudent();
}
else if(result==CY+2*MH)
{
delete_name();
}
else if(result==CY+3*MH)
{
search_name();
}
else if(result==CY+4*MH)
{
modify_name();
}
else
{
scan_sum();
}
cleardevice();
setbkcolor(11);
hanzi16(200,200,BLUE,1,1,"返回菜单");
setcolor(4);
settextstyle(0,0,1);
outtextxy(300,205,"(y/n)");
ch=getch();
if(ch=='y'||ch=='Y')
{
goto again2;
}
else if(ch=='n'||ch=='N')
break;
case CY+6*MH:
{
cleardevice();
setbkcolor(11);
hanzi16(200,200,BLUE,1,1,"返回主菜单");
setcolor(4);
settextstyle(0,0,1);
outtextxy(300,205,"(y/n)");
ch=getch();
if(ch=='y'||ch=='Y')
{
admin();
}
else if(ch=='n'||ch=='N')
{
end();
exit(0);
}
}
default:break;
}
}
/**********************************************************/
/******************** 学生函数 student*********************/
#include"Head.h"
void student1()
{
again3:
int c_x,c_y,result;
char ch;
c_x=CX;
c_y=CY;
cleardevice();
Interface();
Choice(c_x,c_y,4);
Student_Menu();
result= Choose_Student_Menu();
switch(result)
{
case 27:
exit(0);
break;
case CY:
case CY+MH: if(result==CY)
{
search_name();
}
else
{
scan_sum();
}
cleardevice();
setbkcolor(LIGHTCYAN);
hanzi16(200,200,BLUE,1,1,"返回菜单");
setcolor(4);
settextstyle(0,0,1);
outtextxy(300,205,"(y/n)");
ch=getch();
if(ch=='y'||ch=='Y')
{
goto again3;
}
else if(ch=='n'||ch=='N')
break;
case CY+2*MH:{
end();
exit(0);
}
}
}
}
/**********************************************************/
/******************管理用户 adminuser**********************/
#include"Head.h"
void createuser()
{
int k=0,m,n;
char *str1,*str2;
struct user temp;
FILE *fp;
cleardevice();
setbkcolor(11);
setcolor(4);
settextstyle(0,0,1);
fp=fopen(userdatafile,"wb+");
if(fp==NULL)
{
outtext("Can not open the file! End with any key.");
getch();
return;
}
outtextxy(100,30,"Input number , username , password , power .");
outtextxy(100,50," Input number=0 to end input.");
while(k<=10)
{
if(k>3)
{
cleardevice();
setbkcolor(11);
setcolor(4);
settextstyle(0,0,1);
k=0;
}
outtextxy(100,70+k*100,"number :");
input(200,70+k*100,str1);
temp.num = atol(str1);
if(temp.num == 0)
break;
outtextxy(100,90+k*100,"name :");
input(200,90+k*100,temp.name);
outtextxy(100,110+k*100,"password :");
input(200,110+k*100,temp.password);
outtextxy(100,130+k*100,"power :");
input(200,130+k*100,str2);
temp.power=atol(str2);
if(fwrite(&temp,sizeof(user),1,fp)!=1)
{
outtext("Write file fail! End with any key.");
getch();
exit(1);
}
k++;
}
fclose(fp);
display1();
}
void display1()
{
int m,i=0,j;
struct user s[10];
char *str1,*str2;
FILE *fp;
cleardevice();
setbkcolor(11);
setcolor(4);
settextstyle(0,0,1);
fp = fopen(userdatafile,"rb");
if(fp == NULL)
{
outtext(" Can not open the file ! End with any key.");
getch();
return;
}
while(fread(&s[i],sizeof(user),1,fp)!= (int)NULL)
{
i++;
}
outtextxy(30,40,"All the users' information is :");
outtextxy(30,60,"num name password power ") ;
for(j=0;j
{
sprintf(str1,"%ld",s[j].num);
outtextxy(30,80+j*20,str1);
outtextxy(150,80+j*20,s[j].name);
outtextxy(310,80+j*20,s[j].password);
sprintf(str2,"%d",s[j].power);
outtextxy(490,80+j*20,str2);
}
fclose(fp);
getch();
}
void adduser()
{
int k=0,i,j;
FILE *fp;
struct user temp,s[10];
char *str1,*str2,*str3,*str4;
cleardevice();
setbkcolor(11);
setcolor(4);
settextstyle(0,0,1);
fp=fopen(userdatafile,"ab+");
if(fp==NULL)
{
outtext("Can not open the file! End with any key.");
perror("open file fail");
return;
}
outtextxy(30,30,"Input new number , name , password , power .");
outtextxy(30,50,"Input number=0 to end input .");
while(k<=10)
{
if(k>3)
{
cleardevice();
setbkcolor(11);
setcolor(4);
settextstyle(0,0,1);
k=0;
}
outtextxy(30,70+k*100,"number:");
input(150,70+k*100,str1);
temp.num=atol(str1);
if(temp.num==0)
break;
outtextxy(30,90+k*100,"name=");
input(150,90+k*100,temp.name);
outtextxy(30,110+k*100,"password=");
input(150,110+k*100,temp.password);
outtextxy(30,130+k*100,"power=");
input(150,130+k*100,str2);
temp.power=atol(str2);
if(fwrite(&temp,sizeof(user),1,fp)!=1)
{
outtext("write file fail! End with any key");
getch();
return;
}
k++;
}
fclose(fp);
display1();
}
void deluser()
{
int i=0,j=0,p;
char *name,*str;
struct user temp,s[10];
FILE *fp;
cleardevice();
setbkcolor(11);
setcolor(4);
settextstyle(0,0,1);
fp=fopen(userdatafile,"rb");
if(fp==NULL)
{
outtext(" Can not open the file!End with any key.");
getch();
return;
}
outtextxy(30,30,"Please input the deleted user's name :");
input(450,30,str);
while(fread(&temp,sizeof(user),1,fp)!=(int)NULL)
{
j++;
if(strcmp(temp.name,str)!=0)
{
s[i].num=temp.num;
strcpy(s[i].name,temp.name);
strcpy(s[i].password,temp.password);
s[i].power=temp.power;
i++;
}
}
fclose(fp);
if(i==j)
{
outtextxy (30,50,"This student is not in file! ");
getch();
}
else
{
fp=fopen(userdatafile,"wb+");
if(fp==NULL)
{
outtext("Can not set up the user.dat!End with any key.");
getch();
return;
}
for(p=0;p
{
if(fwrite(&s[p],sizeof(user),1,fp)!=1)
{
outtext("Can not write file ! End with any key.");
getch();
return;
}
}
fclose(fp);
display1();
}
}
void modifyuser()
{
char *str,*str1,*str2,*str3,*str4;
int i,j=0,m=0,k,flag=0;
char name[10];
long num;
char password[10];
int power1;
struct user temp,s[10];
FILE *fp;
cleardevice();
setbkcolor(11);
setcolor(4);
settextstyle(0,0,1);
fp=fopen(userdatafile,"rb");
if(fp==NULL)
{
outtext(" Can not open the file! End with any key.");
return;
}
while(fread(&temp,sizeof(user),1,fp)!=(int)NULL)
{
s[m].num=temp.num;
strcpy(s[m].name,temp.name);
strcpy(s[m].password,temp.password);
s[m].power=temp.power;
m++;
}
outtextxy(30,30,"Please input the modified user's name:");
input(400,30,str);
fclose(fp);
for(i=0;i
{
if(strcmp(s[i].name,str)==0)
{
j=i;
outtextxy(30,50,"Have found the user ! Pleaase input new information :");
outtextxy(30,90,"num :");
input(70,90,str1);
num=atol(str1);
outtextxy(140,90,"name :");
input(190,90,name);
outtextxy(280,90,"password :");
input(380,90,password);
outtextxy(450,90,"power :");
input(510,90,str2);
power1=atol(str2);
s[j].num=num;
strcpy(s[j].name,name);
strcpy(s[j].password,password);
s[j].power=power1;
flag=1;
}
}
if(flag!=1)
{
outtextxy(30,50,"This user is not in file !");
getch();
}
else
{
fp=fopen(userdatafile,"wb+");
if(fp==NULL)
{
outtext("Can not open the file ! End with any key.");
return;
}
for(i=0;i
{
if(fwrite(&s[i],sizeof(user),1,fp)!=1)
{
outtext("Can not write the file! End with any key.");
getch();
return;
}
}
fclose(fp);
display1();
}
}
void searchuser()
{
int m,flag=0;
char name[10],*str1,*str2;
struct user temp;
FILE *fp;
cleardevice();
setbkcolor(11);
setcolor(4);
settextstyle(0,0,1);
outtextxy(30,30,"Please input the searched name:");
input(450,30,name);
fp=fopen(userdatafile,"rb");
if(fp==NULL)
{
outtext("Can not open the file! End with any key.");
getch();
return;
}
while(feof(fp)==0)
{
if(fread(&temp,sizeof(user),1,fp)!=(int)NULL)
{
if(strcmp(temp.name,name)==0)
{
outtextxy(30,50,"Have found the user ! The information is : ");
outtextxy(30,70,"number name password power");
sprintf(str1,"%ld",temp.num);
outtextxy(40,90,str1);
outtextxy(130,90,temp.name);
outtextxy(250,90,temp.password);
sprintf(str2,"%d",temp.power);
outtextxy(380,90,str2);
flag=1;
}
}
}
fclose(fp);
if(flag==0)
{
outtextxy(30,50,"The student is not in file !");
}
getch();
}
void scanuser()
{
int m,k=0;
char *str1,*str2;
struct user temp;
FILE *fp;
cleardevice();
setbkcolor(11);
setcolor(4);
settextstyle(0,0,1);
fp=fopen(userdatafile,"rb");
if(fp==NULL)
{
outtext("Can not open the file! End with any key.");
getch();
return;
}
outtextxy(30,40,"number name password power");
while(fread(&temp,sizeof(user),1,fp)!=(int)NULL)
{
sprintf(str1,"%ld",temp.num);
outtextxy(40,60+k*20,str1);
outtextxy(150,60+k*20,temp.name);
outtextxy(290,60+k*20,temp.password);
sprintf(str2,"%d",temp.power);
outtextxy(440,60+k*20,str2);
k++;
}
fclose(fp);
getch();
/**********************************************************//*******************管理学生 adminstudent******************/
#include"Head.h"
void createstudent() /*创建一个新的全部学生记录*/
{
int k=0,m,n,x1,x2,x3,x4,x5;
float sum,average;
struct student temp, s[10];
char *str1,*str2;
FILE *fp;
cleardevice();
setbkcolor(11);
setcolor(4);
settextstyle(0,0,1);
fp=fopen(studentfile,"wb+");
if(fp==NULL)
{
outtext("Can not open the file ! End with any key!");
getch();
return;
}
outtextxy(30,20,"Input number = bye bye to end !");
while(k<10)
{
if(k>1)
{
cleardevice();
setbkcolor(11);
setcolor(4);
settextstyle(0,0,1);
outtextxy(30,20,"Input number = bye bye to end !");
k=0;
}
outtextxy(30,40+k*160,"number:");
input(150,40+k*160,temp.num);
if(strcmp(temp.num,"byebye")==0)
break;
outtextxy(30,60+k*160,"name:");
input(150,60+k*160,temp.name);
outtextxy(30,80+k*160,"department:");
input(150,80+k*160,temp.department);
outtextxy(30,100+k*160,"major:");
input(150,100+k*160,temp.major);
outtextxy(30,120+k*160,"grade:");
input(150,120+k*160,temp.grade);
outtextxy(30,140+k*160,"The score of all subjects:");
outtextxy(30,160+k*160,"chinese");
input(30,180+k*160,temp.chinese);
outtextxy(100,160+k*160,"english");
input(110,180+k*160,temp.english);
outtextxy(180,160+k*160,"math");
input(190,180+k*160,temp.math);
outtextxy(240,160+k*160,"physics");
input(250,180+k*160,temp.physics);
outtextxy(340,160+k*160,"c_language");
input(350,180+k*160,temp.c_language);
x1=atol(temp.chinese);
x2=atol(temp.english);
x3=atol(temp.math);
x4=atol(temp.physics);
x5=atol(temp.c_language);
sum=sub(x1,x2,x3,x4,x5);
itoa(sum,str1,10);
strcpy(temp.sum,str1);
average=sum/5;
itoa(average,str2,10);
strcpy(temp.average,str2);
if(fwrite(&temp,sizeof(student),1,fp)!=1)
{
outtext("Write file fail!");
getch();
return;
}
k++;
}
fclose(fp);
getch();
display2();
}
float sub(float x1,float x2,float x3,float x4,float x5)
{
float sum=0;
sum=x1+x2+x3+x4+x5;
return sum;
}
void display2()
{
int m,i=0,j;
struct student s[10];
FILE *fp;
cleardevice();
setbkcolor(11);
setcolor(4);
settextstyle(0,0,1);
fp = fopen(studentfile,"rb");
if(fp == NULL)
{
outtext(" Can not open the file ! End with any key.");
getch();
return;
}
while(fread(&s[i],sizeof(student),1,fp)!= (int)NULL)
{
i++;
}
outtextxy(30,40,"All the students' information is :");
outtextxy(30,60,"number name department major grade") ;
for(j=0;j
{
outtextxy(40,80+j*20,s[j].num);
outtextxy(100,80+j*20,s[j].name);
outtextxy(190,80+j*20,s[j].department);
outtextxy(330,80+j*20,s[j].major);
outtextxy(490,80+j*20,s[j].grade);
}
outtextxy(30,80+i*20,"chinese english math physics c_language sum average");
for(j=0;j
{
outtextxy(50,100+i*20+j*20,s[j].chinese);
outtextxy(120,100+i*20+j*20,s[j].english);
outtextxy(200,100+i*20+j*20,s[j].math);
outtextxy(280,100+i*20+j*20,s[j].physics);
outtextxy(360,100+i*20+j*20,s[j].c_language);
outtextxy(430,100+i*20+j*20,s[j].sum);
outtextxy(510,100+i*20+j*20,s[j].average);
}
fclose(fp);
getch();
}
void delete_name()
{
int i=0,j=0,m,n,p;
char *del_name;
struct student temp,s[10];
FILE *fp;
cleardevice();
setbkcolor(11);
setcolor(4);
settextstyle(0,0,1);
fp = fopen(studentfile,"rb");
if(fp == NULL)
{
outtext("Can not open the file ! End with any key!");
getch();
return;
}
outtextxy(30,30,"Please input the deleted student's name :");
input(450,30,del_name);
while(fread(&temp,sizeof(student),1,fp)!=(int)NULL)
{
j++;
if(strcmp(temp.name,del_name)!=0)
{
strcpy(s[i].num,temp.num);
strcpy(s[i].name,temp.name);
strcpy(s[i].department,temp.department);
strcpy(s[i].major,temp.major);
strcpy(s[i].grade,temp.grade);
strcpy(s[i].chinese,temp.chinese);
strcpy(s[i].english,temp.english);
strcpy(s[i].math,temp.math);
strcpy(s[i].physics,temp.physics);
strcpy(s[i].c_language,temp.c_language);
i++;
}
}
fclose(fp);
if(i==j)
{
outtextxy (30,50,"There is not this student in file! ");
getch();
return;
}
else
{
fp=fopen(studentfile,"wb+");
if(fp==NULL)
{
outtext("Can not set up the user.dat!End with any key.");
getch();
return;
}
for(p=0;p
{
if(fwrite(&s[p],sizeof(student),1,fp)!=1)
{
outtext("Can not write file!End with any key.");
getch();
return;
}
}
fclose(fp);
display2();
}
}
void addstudent()
{
int k=0,x1,x2,x3,x4,x5;
char *str1,*str2;
float sum,average;
struct student temp,s[10];
FILE *fp;
cleardevice();
setbkcolor(11);
setcolor(4);
settextstyle(0,0,1);
fp = fopen(studentfile,"ab+");
if(fp == NULL)
{
outtext("Can not open the file ! End with any key.");
getch();
return;
}
outtextxy(30,30,"Input number = byebye to end");
while(k<10)
{
if(k>1)
{
cleardevice();
setbkcolor(11);
setcolor(4);
settextstyle(0,0,1);
outtextxy(30,20,"Input number = byebye to end");
k=0;
}
outtextxy(40,40+k*160,"number:");
input(160,40+k*160,temp.num);
if(strcmp(temp.num,"byebye")==0)
break;
outtextxy(40,60+k*160,"name:");
input(160,60+k*160,temp.name);
outtextxy(40,80+k*160,"department:");
input(160,80+k*160,temp.department);
outtextxy(40,100+k*160,"major:");
input(160,100+k*160,temp.major);
outtextxy(40,120+k*160,"grade:");
input(160,120+k*160,temp.grade);
outtextxy(40,140+k*160,"The score of all subjects:");
outtextxy(40,160+k*160,"chinese");
input(40,180+k*160,temp.chinese);
outtextxy(120,160+k*160,"english");
input(120,180+k*160,temp.english);
outtextxy(200,160+k*160,"math");
input(200,180+k*160,temp.math);
outtextxy(280,160+k*160,"physics");
input(280,180+k*160,temp.physics);
outtextxy(360,160+k*160,"c_language");
input(360,180+k*160,temp.c_language);
x1=atol(temp.chinese);
x2=atol(temp.english);
x3=atol(temp.math);
x4=atol(temp.physics);
x5=atol(temp.c_language);
sum=sub(x1,x2,x3,x4,x5);
itoa(sum,str1,10);
strcpy(temp.sum,str1);
average=sum/5;
itoa(average,str2,10);
strcpy(temp.average,str2);
if(fwrite(&temp,sizeof(student),1,fp)!= 1)
{
outtext(" write file fail !end with any key!");
getch();
return;
}
k++;
}
fclose(fp);
display2();
}
void search_name() /*按照姓名查找某个学生的信息*/
{
int flag=0;
char *p1,*p2,*name;
struct student temp,s[10];
FILE *fp;
cleardevice();
setbkcolor(11);
setcolor(4);
settextstyle(0,0,1);
outtextxy(30,30,"Please input the name to search , name:");
input(400,30,name);
fp = fopen(studentfile,"rb");
if(fp == NULL)
{
outtext("Can not open the file ! End with any key!");
getch();
return;
}
while(feof(fp)==0)
{
if(fread(&temp,sizeof(student),1,fp)!=(int)NULL)
{
if(strcmp(temp.name,name)==0)
{
outtextxy(30,50,"The student's infomation is :");
outtextxy(30,70,"number name department major grade");
sprintf(p1,"%2s%15s%15s%15s%12s",temp.num,temp.name,temp.department,temp.major,temp.grade);
outtextxy(30,90,p1);
outtextxy(30,110,"chinese english math physics c_language sum average");
sprintf(p2,"%2s%12s%12s%11s%11s%10s%9s ",temp.chinese,temp.english,temp.math,temp.physics,temp.c_language,temp.sum,temp.average);
outtextxy(30,130,p2);
flag=1;
}
}
}
fclose(fp);
if(flag==0)
{
outtextxy(30,50,"This student is not in file !");
}
getch();
}
void modify_name()
{
int i=0,j,m,flag=0,x1,x2,x3,x4,x5;
float sum,average;
char num[10],name[20],department[20],major[20],grade[5],chinese[10],english[10],math[10],physics[10],c_language[10];
char name1[20],*str1,*str2;
struct student temp,s[10];
FILE *fp;
cleardevice();
setbkcolor(11);
setcolor(4);
settextstyle(0,0,1);
fp = fopen(studentfile,"rb");
if(fp == NULL)
{
outtext("Can not open the file ! End with any key!");
getch();
return;
}
while(fread(&temp,sizeof(student),1,fp)!=(int)NULL)
{
strcpy(s[i].num,temp.num);
strcpy(s[i].name,temp.name);
strcpy(s[i].department,temp.department);
strcpy(s[i].major,temp.major);
strcpy(s[i].grade,temp.grade);
strcpy(s[i].chinese,temp.chinese);
strcpy(s[i].english,temp.english);
strcpy(s[i].math,temp.math);
strcpy(s[i].physics,temp.physics);
strcpy(s[i].c_language,temp.c_language);
strcpy(s[i].sum,temp.sum);
strcpy(s[i].average,temp.average);
i++;
}
fclose(fp);
outtextxy(30,30,"Please input the name to modify :");
input(300,30,name1);
for(j=0;j
{
if(strcmp(s[j].name,name1)==0)
{
m=j;
outtextxy(30,50,"Have found the user ! Please input new information :");
outtextxy(30,70,"number:");
input(130,70,num);
outtextxy(30,90,"name :");
input(130,90,name);
outtextxy(30,110,"department :");
input(130,110,department);
outtextxy(30,130,"major :");
input(130,130,major);
outtextxy(30,150,"grade :");
input(130,150,grade);
outtextxy(30,170,"chinese :");
input(130,170,chinese);
outtextxy(30,190,"english :");
input(130,190,english);
outtextxy(30,210,"math :");
input(130,210,math);
outtextxy(30,230,"physics :");
input(130,230,physics);
outtextxy(30,250,"c_language");
input(130,250,c_language);
x1=atol(chinese);
x2=atol(english);
x3=atol(math);
x4=atol(physics);
x5=atol(c_language);
sum=sub(x1,x2,x3,x4,x5);
itoa(sum,str1,10);
average=sum/5;
itoa(average,str2,10);
strcpy(s[m].num,num);
strcpy(s[m].name,name);
strcpy(s[m].department,department);
strcpy(s[m].major,major);
strcpy(s[m].grade,grade);
strcpy(s[m].chinese,chinese);
strcpy(s[m].english,english);
strcpy(s[m].math,math);
strcpy(s[m].physics,physics);
strcpy(s[m].c_language,c_language);
strcpy(s[m].sum,str1);
strcpy(s[m].average,str2);
flag=1;
}
}
if(flag!=1)
{
outtextxy(30,50,"The student is not in file ! ");
getch();
return;
}
else
{
fp=fopen(studentfile,"wb+");
if(fp == NULL)
{
outtext("Can not set up the file ! End with any key!");
getch();
return;
}
for(j=0;j
{
if(fwrite(&s[j],sizeof(student),1,fp)!=1)
{
outtext("Can not write the file! End with any key!");
getch();
return;
}
}
fclose(fp);
display2();
}
}
void scan_sum() /*按照总分由高到低的顺序浏览学生的信息*/
{
int p,k,j,i=0,m;
struct student temp,s[10];
FILE *fp;
cleardevice();
setbkcolor(11);
setcolor(4);
settextstyle(0,0,1);
fp=fopen(studentfile,"rb");
if(fp==NULL)
{
outtext("Can not open the file ! End with any key!");
getch();
return;
}
while(fread(&temp,sizeof(student),1,fp)!=(int)NULL)
{
strcpy(s[i].num,temp.num);
strcpy(s[i].name,temp.name);
strcpy(s[i].department,temp.department);
strcpy(s[i].major,temp.major);
strcpy(s[i].grade,temp.grade);
strcpy(s[i].chinese,temp.chinese);
strcpy(s[i].english,temp.english);
strcpy(s[i].math,temp.math);
strcpy(s[i].physics,temp.physics);
strcpy(s[i].c_language,temp.c_language);
strcpy(s[i].sum,temp.sum);
strcpy(s[i].average,temp.average);
i++;
}
if(i>1)
{
for(j=0;j
{
for(k=j+1;k
{
if(strcmp(s[j].sum,s[k].sum)<0)
{
strcpy(temp.num,s[k].num);
strcpy(temp.name,s[k].name);
strcpy(temp.department,s[k].department);
strcpy(temp.major,s[k].major);
strcpy(temp.grade,s[k].grade);
strcpy(temp.chinese,s[k].chinese);
strcpy(temp.english,s[k].english);
strcpy(temp.math,s[k].math);
strcpy(temp.physics,s[k].physics);
strcpy(temp.c_language,s[k].c_language);
strcpy(temp.sum,s[k].sum);
strcpy(temp.average,s[k].average);
strcpy(s[k].num,s[j].num);
strcpy(s[k].name,s[j].name);
strcpy(s[k].department,s[j].department);
strcpy(s[k].major,s[j].major);
strcpy(s[k].grade,s[j].grade);
strcpy(s[k].chinese,s[j].chinese);
strcpy(s[k].english,s[j].english);
strcpy(s[k].math,s[j].math);
strcpy(s[k].physics,s[j].physics);
strcpy(s[k].c_language,s[j].c_language);
strcpy(s[k].sum,s[j].sum);
strcpy(s[k].average,s[j].average);
strcpy(s[j].num,temp.num);
strcpy(s[j].name,temp.name);
strcpy(s[j].department,temp.department);
strcpy(s[j].major,temp.major);
strcpy(s[j].grade,temp.grade);
strcpy(s[j].chinese,temp.chinese);
strcpy(s[j].english,temp.english);
strcpy(s[j].math,temp.math);
strcpy(s[j].physics,temp.physics);
strcpy(s[j].c_language,temp.c_language);
strcpy(s[j].sum,temp.sum);
strcpy(s[j].average,temp.average);
}
}
}
}
fclose(fp);
fp=fopen(studentfile,"wb+");
if(fp==NULL)
{
outtext("Can not open the file !");
getch();
return;
}
for(p=0;p
{
if(fwrite(&s[p],sizeof(student),1,fp)!=1)
{
outtext("Can not write the file! End with any key!");
getch();
return;
}
}
fclose(fp);
display2();
}
数据库课程设计报告指导老师贺亚茹组名组长组员完成日期成绩数据库课程设计报告一项目名称学生信息管理系统二项目需求分析1项目需求分析简…
课设名称学生成绩管理系统院系姓名学号年级专业班级指导教师时间20xx年6月目录第一部分摘要3第二部分目的背景与意义4第三部分需求分…
C程序设计报告书课题名称学号姓名班级指导老师成绩一程序设计目的本课程设计是在学习C基本理论之后的实践教学环节该实践教学是软件设计的…
C语言课程设计报告一问题描述题目七学生成绩管理系统设计学生成绩信息包括学期学号班别姓名四门课程成绩语文数学英语和计算机等主要功能1…
C可视化课程设计学生信息管理系统设计C基于MFC类可视化程序设计报告小组成员赵文琪倪涛学号31307042333130704234…
《C语言程序设计》课程设计报告专业:班级:姓名:指导教师:二零##年十二月二十六日目录一、设计题目2二、设计目的2三、设计内容23…
福建师范大学人民武装学院C语言程序设计报告书设计名称学生成绩管理系统专业软件工程指导老师陈琳姓名黄强学号119xx20xx0262…
学生信息管理系统HUNANUNIVERSITY程序设计训练报告学生姓名学生学号专业班级指导老师院长系主任20xx年5月25日第1页…
实训报告题目学生信息管理系统院系信息科技学院专业电子信息工程姓名殷浩学号1152100135指导教师杨呈永日期20xx年6月26日…
郑州大学实训报告实训名称学生成绩管理系统设计姓名院系软件学院专业班级学号指导教师成绩时间年2月日至年月31日目录实训任务书I实训进…