/*
课程设计项目名称:学生档案管理系统
作者:施瑞文
时间:2018.3.3
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
#define N sizeof(struct Student)
#define M sizeof(struct Password)
#define MAX 1000
struct Student
{
char number[10]; //学号
char name[10]; //姓名
char sex[2]; //性别
struct Birthday //出生日期
{
int year; //年
int month; //月
int day; //日
}birtnday;
struct Score //成绩
{
float c_language; //c语言
float math; //高数
float Russian;//俄语
float Russian_hearing; //俄语听力
float professional; //专业导论
float politics; //政治
}score;
char remark[100]; //备注
int num;
struct Student *next;
};
typedef struct Student Stu;
typedef Stu *Stup;
typedef struct Password
{
char password[18];
struct Password *next;
}pass;
typedef pass *passw;
typedef struct TOTAL //总分
{
char number[10];
char name[10];
char sex[2];
float c_language; //c语言
float math; //高数
float Russian;//俄语
float Russian_hearing; //俄语听力
float professional; //专业导论
float politics; //政治
float sum;
}Total;
Total total[MAX];
//好多自定义函数
void color(short x);//设置颜色
void HideCursor(); //隐藏光标
void toxy(int x, int y); //将光标移动到X,Y坐标处
void menu(); //主菜单
void over(); //退出软件
void signin(); //登陆
passw ff(); //将文件中的内容读入链表,返回值为表头地址
void save_password(passw p);//保存密码
void amend_password(); //修改密码
void input_information(); //信息录入
void amend_information(); //修改信息
void delete_information(); //删除信息
void delete_number(); //按学号查询删除
void delete_name(); //按姓名查询删除
void save_information(Stup p); //保存信息
void print_information(); //信息显示
Stup ss(); //将文件中的内容读入链表,返回值为表头地址
void find_information(); ///查找信息
void find_number_information(); //按学号查询
void find_name_information(); //按姓名查询
void statistics_information(); //信息统计
void average_score(); //平均分
void total_score_ranked(); //总分排名
void fail_numbers(); //各科不及格人数
void assignment(); //将信息赋值到一个结构体中
void grade_table(); //各科成绩分布
void analyze_c(); //c语言
void analyze_math();//高数
void analyze_Russian();//俄语
void analyze_Russian_hearing();//俄语听力
void analyze_professional();//专业导论
void analyze_politics(); //政治
int cmp(const void *a,const void *b);
int cmp1(const void *a,const void *b); //快速排序
int cmp2(const void *a,const void *b);
int cmp3(const void *a,const void *b);
int cmp4(const void *a,const void *b);
int cmp5(const void *a,const void *b);
int cmp6(const void *a,const void *b);
char _password[18];
passw password_head;
int len;
void color(short x) //设置颜色
{
if(x>=0&&x<=15)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),x);
}
else
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),x);
}
}
void HideCursor() //隐藏光标
{
CONSOLE_CURSOR_INFO cursor_info = {1, 0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
void toxy(int x, int y) //将光标移动到X,Y坐标处
{
COORD pos = { x , y };
HANDLE Out = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(Out, pos);
}
int cmp(const void *a,const void *b) //快速排序
{
return ((*(Total *)b).sum)-((*(Total *)a).sum);
}
int cmp1(const void *a,const void *b) //快速排序
{
return ((*(Total *)b).c_language)-((*(Total *)a).c_language);
}
int cmp2(const void *a,const void *b) //快速排序
{
return ((*(Total *)b).math)-((*(Total *)a).math);
}
int cmp3(const void *a,const void *b) //快速排序
{
return ((*(Total *)b).Russian)-((*(Total *)a).Russian);
}
int cmp4(const void *a,const void *b) //快速排序
{
return ((*(Total *)b).Russian_hearing)-((*(Total *)a).Russian_hearing);
}
int cmp5(const void *a,const void *b) //快速排序
{
return ((*(Total *)b).professional)-((*(Total *)a).professional);
}
int cmp6(const void *a,const void *b) //快速排序
{
return ((*(Total *)b).politics)-((*(Total *)a).politics);
}
void menu() //主菜单
{
do
{
system("cls"); //清屏
fflush(stdin); //清空缓存
color(14);
char t;
toxy(45,6);
printf("-----学生档案管理系统-----");
toxy(45,7);
printf("| |");
toxy(45,8);
printf("| 1.信息录入 |");
toxy(45,9);
printf("| |");
toxy(45,10);
printf("| 2.信息修改 |");
toxy(45,11);
printf("| |");
toxy(45,12);
printf("| 3.信息删除 |");
toxy(45,13);
printf("| |");
toxy(45,14);
printf("| 4.信息显示 |");
toxy(45,15);
printf("| |");
toxy(45,16);
printf("| 5.信息查找 |");
toxy(45,17);
printf("| |");
toxy(45,18);
printf("| 6.信息统计 |");
toxy(45,19);
printf("| |");
toxy(45,20);
printf("| 7.修改密码 |");
toxy(45,21);
printf("| |");
toxy(45,22);
printf("| 8.退出软件 |");
toxy(45,23);
printf("--------------------------");
t=getch();
switch(t)
{
case '1':input_information();break;
case '2':amend_information();break;
case '3':delete_information();break;
case '4':print_information();break;
case '5':find_information();break;
case '6':statistics_information();break;
case '7':amend_password();break;
case '8':over();break;
default :break;
}
}while(1);//永远为真
}
passw ff() //将文件中的内容读入链表,返回值为表头地址
{
FILE *fp; //文件指针
passw password_head=NULL;
fp=fopen("password","a+"); //以追加和读的方式打开名为password的文件
if(fp==NULL)
{
printf("cannot open file");
}
//printf("%p\n",password_head);
password_head=(passw)malloc(M); //申请空间
strcpy(password_head->password," "); //初始化密码
//printf("%s\n",password_head);
fread(password_head,M,1,fp);
fclose(fp); //关闭文件
return password_head; //返回值表头地址
}
void signin() //登录
{
do
{
system("cls");
color(13); //好看的颜色
passw p,head;
int i=0;
char k;
head=ff(); //调用函数,返回值为表头地址
p=head;
//printf("%s\n",p->password);
//printf("%p\n",p);
char str[]="000000"; //初始密码
toxy(45,6);
printf("-----学生档案管理系统-----");
toxy(45,8);
printf("请输入管理者密码:");
for(;;) //此处为输入密码不回显操作
{
k=getch(); //输入k
if(k=='\r') //如果输入k为回车,则跳出循环
{
break;
}
else if(k=='\b') //如果输入k为删除键
{
if(i>0) //如若密码还没完全删除
{
printf("\b");
printf(" ");
printf("\b");
i--;
}
}
else //如果输入的k既不是删除键,也不是回车键
{
_password[i]=k; //把k的值赋给_password[i];
printf("*"); //输出*号,保护用户隐私
i++; //密码位数加1
}
}
_password[i]='\0';
if(strcmp(p->password," ")==0) //判断程序是否是第一次运行,
{
strcpy(p->password,str);//如果是,则将初始密码000000赋值给p->password
save_password(p); //保存p
}
if(strcmp(head->password,_password)==0) //判断密码是否输入正确
{
system("cls");
toxy(45,8);
printf("正在登陆....");
Sleep(500);
menu();
}
else
{
toxy(45,10);
printf("密码错误!");
Sleep(500);
}
}while(1);
}
void amend_password() //修改密码
{
system("cls"); //清屏
color(12); //看着舒服的颜色
passw p,head; //隐藏光标,看着更舒服
head=ff();
do
{
system("cls"); //清屏
p=head;
char password[18],newpassword[18],t,k;
int i=0;
toxy(45,6); //将光标移动到坐标为(50,5)的位置
printf("学生档案管理系统");
toxy(48,8);
printf("修改密码");
toxy(45,10);
printf("请输入旧密码:");
for(;;) //此处为输入密码不回显操作
{
k=getch(); //输入k
if(k=='\r') //如果输入k为回车,则跳出循环
{
break;
}
else if(k=='\b') //如果输入k为删除键
{
if(i>0) //如若密码还没完全删除
{
printf("\b");
printf(" ");
printf("\b");
i--;
}
}
else //如果输入的k既不是删除键,也不是回车键
{
password[i]=k; //把k的值赋给_password[i];
printf("*"); //输出*号,保护用户隐私
i++; //密码位数加1
}
}
password[i]='\0';
i=0;
toxy(45,12);
printf("请输入新密码:");
for(;;) //此处为输入密码不回显操作
{
k=getch(); //输入k
if(k=='\r') //如果输入k为回车,则跳出循环
{
break;
}
else if(k=='\b') //如果输入k为删除键
{
if(i>0) //如若密码还没完全删除
{
printf("\b");
printf(" ");
printf("\b");
i--;
}
}
else //如果输入的k既不是删除键,也不是回车键
{
newpassword[i]=k; //把k的值赋给_password[i];
printf("*"); //输出*号,保护用户隐私
i++; //密码位数加1
}
}
newpassword[i]='\0';
if(p!=NULL) //如果p不为空
{
if(strcmp(p->password,password)==0) //如果旧密码输入正确
{
strcpy(p->password,newpassword); //将旧密码改为新密码
break; //跳出循环
}
else //如果旧密码输入错误
{
system("cls");
toxy(46,8);
printf("--------------------------");
toxy(46,9);
printf("| |");
toxy(46,10);
printf("| 密码错误!是否继续? |");
toxy(46,11);
printf("| |");
toxy(46,12);
printf("| 1.是 2.否 |");
toxy(46,13);
printf("| |");
toxy(46,14);
printf("--------------------------");
while(1)
{
t=getch(); //输入t
if(t=='1')
{
system("cls");
break;
}
else if(t=='2')
menu();
}
}
}
}while(1);
save_password(p); //永远为真
system("cls");
toxy(45,10);
printf("修改成功!即将返回主菜单....");
Sleep(500);
menu();
}
void save_password(passw p) //将p所指向的内容保存到文件中
{
FILE *fp;
fp=fopen("password","w"); //以只写的方式打开名为password的文件
if(fp==NULL)
{
printf("cannot open file");
}
if(fwrite(p,M,1,fp)!=1) //将p所指向的一段大小为M的内容写入fp所指向的文件中
{
printf("write error!");
}
fclose(fp); //关闭文件
}
Stup ss() //将文件中的内容读出到链表中
{
FILE *fp; //文件指针
Stup head=NULL,p,p1,pr=NULL;
int n=0;
fp=fopen("student","ab+");
if(fp==NULL)
{
printf("cannot open file");
}
while(!feof(fp))// feof函数可以检查文件读写位置标志是否移动到文件末尾,feof(fp)检查fp所指向的文件是否结束,如果是
{ //则函数值为真,否则为假,即“!feof(fp)”为真,在while循环中检查 “!feof(fp)”为真,就执行循环体
n++;
p=(Stup)malloc(N); //向内存申请一段空间
fread(p,N,1,fp); //从fp所指向的文件读入1个大小为M的数据,存储到p所指向的空间中
if(n==1)
{
head=p;
p1=p;
}
else
{
pr=p1;
p1->next=p;
p1=p;
}
}
if(pr!=NULL)
pr->next=NULL;
else if(pr==NULL)
head=NULL;
fclose(fp);
return head;
}
void input_information()//录入信息
{
system("cls");
color(15);
int i=0,n;
Stup p;
toxy(45,6);
printf("-----学生档案管理系统-----");
toxy(50,7);
printf("信息录入");
toxy(45,8);
printf("你需要录入多少个学生的信息?请输入:");
scanf("%d",&n);getchar();
while(i!=n)
{
system("cls");
i++;
p=(Stup)malloc(N);
toxy(45,6);
printf("-----学生档案管理系统-----");
toxy(50,7);
printf("信息录入");
toxy(45,8);
printf("请输入学生学号:");
gets(p->number);
toxy(45,9);
printf("请输入学生姓名:");
gets(p->name);
toxy(45,10);
printf("请输入学生性别(男或女):");
gets(p->sex);
toxy(45,11);
printf("请输入学生出生日期(年月日,以空格隔开):");
scanf("%d%d%d",&p->birtnday.year,&p->birtnday.month,&p->birtnday.day);getchar();
toxy(45,12);
printf("请输入c语言成绩:");
scanf("%f",&p->score.c_language);getchar();
toxy(45,13);
printf("请输入高数成绩:");
scanf("%f",&p->score.math);getchar();
toxy(45,14);
printf("请输入俄语成绩:");
scanf("%f",&p->score.Russian);getchar();
toxy(45,15);
printf("请输入俄语听力成绩:");
scanf("%f",&p->score.Russian_hearing);getchar();
toxy(45,16);
printf("请输入专业导论成绩:");
scanf("%f",&p->score.professional);getchar();
toxy(45,17);
printf("请输入政治成绩:");
scanf("%f",&p->score.politics);getchar();
toxy(45,18);
printf("请输入备注:");
gets(p->remark);
save_information(p);
}
toxy(48,19);
printf("录入完毕!按任意键返回主菜单!");
getch();
}
void amend_information() //修改信息
{
system("cls"); //清屏
color(11);
Stup p,head;
FILE *fp;
int i=15,j=0,c;
char number[10]; //学号
char name[10],_name[10]; //姓名
char sex[2]; //性别
int year; //年
int month; //月
int day; //日
float c_language; //c语言
float math; //高数
float Russian;//俄语
float Russian_hearing; //俄语听力
float professional; //专业导论
float politics; //政治
char remark[100]; //备注
char ch,t;
head=ss();
p=head;
do
{
system("cls");
toxy(45,6);
printf("-----学生档案管理系统-----");
toxy(45,7);
printf("修改信息");
toxy(40,9);
printf("请输入您要修改的信息:");
gets(_name);
toxy(20,8);
printf("----------------------------------------------------------------------------------------------");
toxy(20,9);
printf("学号 姓名 性别 出生--日期 c语言 高 数 俄 语 俄语听力 专业导论 政 治 备注");
toxy(20,10);
printf("----------------------------------------------------------------------------------------------");
i=11;j=0;
while(p!=NULL) //将每个结点的p->num都赋为0,以免后面数据干扰
{
p->num=0;
p=p->next;
}
p=head; //重新让p指向head
while(p!=NULL)
{
if(strcmp(p->name,_name)==0)
{
toxy(18,i);
j++;
if(p->birtnday.month<10&&p->birtnday.day<10)
printf("%d.%s %s %s %d.0%d.0%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",j,p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
else if(p->birtnday.month<10&&p->birtnday.day>=10)
printf("%d.%s %s %s %d.0%d.%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",j,p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
else if(p->birtnday.month>=10&&p->birtnday.day<10)
printf("%d.%s %s %s %d.%d.0%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",j,p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
else
printf("%d.%s %s %s %d.%d.%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",j,p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
i++;
p->num=j; //给p->num赋值,即给满足搜索要求的结点编号
}
p=p->next;
}
if(j==0) //如果j=0,即没有进入前面的搜索循环,也就是没有找到相应的信息
{
toxy(50,i);
printf("没有找到相应的信息!(按0返回,按1重新搜索)");
while(1) //死循环是为了防止除0和1的其他按键干扰
{
ch=getch();
if(ch=='0')
{
menu();break;
}
else if(ch=='1')
{
break;
}
}
if(ch=='1') //如果输入的ch等于1,则结束本次循环
continue;
}
while(1)
{
toxy(50,i);
printf("请输入您要修改的信息的标号:");
scanf("%d",&c);
getchar();
i++;
if(c<=j) //如果c<=j,即输入正确
break;
else if(c>j) //否则,输入错误
{
toxy(50,i);
printf("没有找到您所要修改的信息,请重新输入!");
i++;
Sleep(500); //暂停0.5秒
}
}
p=head; //让p重新指向head,即第一个结点
while(p!=NULL&&p->num!=c) //遍历链表,寻找满足要求的结点
{
p=p->next;
}
if(p!=NULL) //如果寻找成功,进入修改部分
{
system("cls"); //清屏
toxy(45,8);
printf("请输入学生学号:");
gets(number);
strcpy(p->number,number);
toxy(45,9);
printf("请输入学生姓名:");
gets(name);
strcpy(p->name,name);
toxy(45,10);
printf("请输入学生性别(男或女):");
gets(sex);
strcpy(p->sex,sex);
toxy(45,11);
printf("请输入学生出生日期(年月日,以空格隔开):");
scanf("%d%d%d",&year,&month,&day);getchar();
p->birtnday.year=year;
p->birtnday.month=month;
p->birtnday.day=day;
toxy(45,12);
printf("请输入c语言成绩:");
scanf("%f",&c_language);getchar();
p->score.c_language=c_language;
toxy(45,13);
printf("请输入高数成绩:");
scanf("%f",&math);getchar();
p->score.math=math;
toxy(45,14);
printf("请输入俄语成绩:");
scanf("%f",&Russian);getchar();
p->score.Russian=Russian;
toxy(45,15);
printf("请输入俄语听力成绩:");
scanf("%f",&Russian_hearing);getchar();
p->score.Russian_hearing=Russian_hearing;
toxy(45,16);
printf("请输入专业导论成绩:");
scanf("%f",&professional);getchar();
p->score.professional=professional;
toxy(45,17);
printf("请输入政治成绩:");
scanf("%f",&politics);getchar();
p->score.politics=politics;
toxy(45,18);
printf("请输入备注:");
gets(remark);
strcpy(p->remark,remark);
toxy(46,16);
printf("-------------------------");
toxy(46,17);
printf("| |");
toxy(46,18);
printf("| 是否确认修改? |");
toxy(46,19);
printf("| 1.确认 2.取消 |");
toxy(46,20);
printf("| |");
toxy(46,21);
printf("-------------------------");
while(1) //死循环为防止其他按键干扰
{
t=getch();
if(t=='1')
break;
else if(t=='2')
{
menu();
}
}
if(t=='1') //如果t等于1,则跳出循环
{
break;
}
}
}while(1);
p=head; //p重新指向头节点
system("cls");
toxy(44,12);
printf("正在修改....");
fp=fopen("student","wb"); //打开文件的同时清除文件内的内容
if(fp==NULL)
{
printf("cannot open file");
}
while(p!=NULL)
{
if(fwrite(p,N,1,fp)!=1) //将p所指向的内容存入fp所指向的文件中
{
printf("file write error\n");
}
p=p->next;
}
fclose(fp); //关闭文件
Sleep(500);
system("cls");
toxy(44,12);
printf("修改成功!正在自动跳转到主菜单....");
Sleep(500);
menu();
}
void delete_information() //删除信息
{
do
{
system("cls");
color(12);
char t;
toxy(45,6);
printf("-----学生档案管理系统-----");
toxy(48,7);
printf("信息删除");
toxy(45,9);
printf("1) 按学号查询删除");
toxy(45,11);
printf("2) 按姓名查询删除");
toxy(48,13);
printf("按0返回主菜单");
t=getch();
switch(t)
{
case '0':menu();break;
case '1':delete_number();break;
case '2':delete_name();break;
default :break;
}
}while(1);
}
void delete_number() //按学号查询删除
{
do
{
system("cls");
color(10);
char number[10];
char t,c;
int i=11,j=0;
Stup head,p,pre=NULL ;
FILE *fp;
toxy(48,9);
printf("请输入你要删除的学生的学号:");
gets(number);
head=ss();
p=head;
toxy(45,6);
printf("-----学生档案管理系统-----");
toxy(20,8);
printf("----------------------------------------------------------------------------------------------");
toxy(20,9);
printf("学号 姓名 性别 出生--日期 c语言 高 数 俄 语 俄语听力 专业导论 政 治 备注");
toxy(20,10);
printf("----------------------------------------------------------------------------------------------");
while(p!=NULL&&strcmp(p->number,number)!=0)
{
pre=p;
p=p->next;
}
if(p!=NULL)
{
toxy(20,i);
if(p->birtnday.month<10&&p->birtnday.day<10)
printf("%s %s %s %d.0%d.0%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
else if(p->birtnday.month<10&&p->birtnday.day>=10)
printf("%s %s %s %d.0%d.%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
else if(p->birtnday.month>=10&&p->birtnday.day<10)
printf("%s %s %s %d.%d.0%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
else
printf("%s %s %s %d.%d.%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
toxy(45,i+1);
printf("1.删除 2.取消");
while(1)
{
c=getch();
if(c=='1')
break;
else if(c=='2')
delete_number();
}
if(pre==NULL)
head=head->next;
else
pre->next=p->next;
system("cls");
toxy(45,10);
printf("正在删除....");
p=head->next;
fp=fopen("student","wb");
if(fp==NULL)
{
printf("cannot open file");
}
if(fwrite(head,N,1,fp)!=1)
{
printf("write error");
}
fclose(fp);
fp=fopen("student","ab");
if(fp==NULL)
{
printf("cannot open file");
}
while(p!=NULL)
{
if(fwrite(p,N,1,fp)!=1)
{
printf("write error");
}
p=p->next;
}
fclose(fp);
Sleep(500);
system("cls");
toxy(45,10);
printf("删除成功!正在返回....");
Sleep(500);
delete_information();
}
else if(p==NULL)
{
toxy(48,i);
printf("您输入的信息不存在!按0返回主菜单,1返回上一级菜单,2重新查找");
while(1)
{
t=getch();
if(t=='0')
{
menu();
}
else if(t=='1')
{
delete_information();
}
else if(t=='2')
{
break;
}
}
}
free(p);
}while(1);
}
void delete_name() //按姓名查询删除
{
do
{
system("cls");
color(10);
char name[10];
char t,c;
int i=11,j=0,key;
Stup head,p,pre;
FILE *fp;
toxy(48,9);
printf("请输入你要删除的学生的姓名:");
gets(name);
head=ss();
p=head;
while(p!=NULL)
{
p->num=0;
p=p->next;
}
p=head;
toxy(45,6);
printf("-----学生档案管理系统-----");
toxy(20,8);
printf("----------------------------------------------------------------------------------------------");
toxy(20,9);
printf("学号 姓名 性别 出生--日期 c语言 高 数 俄 语 俄语听力 专业导论 政 治 备注");
toxy(20,10);
printf("----------------------------------------------------------------------------------------------");
while(p!=NULL)
{
if(strcmp(p->name,name)==0)
{
toxy(18,i);
j++;
if(p->birtnday.month<10&&p->birtnday.day<10)
printf("%d.%s %s %s %d.0%d.0%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",j,p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
else if(p->birtnday.month<10&&p->birtnday.day>=10)
printf("%d.%s %s %s %d.0%d.%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",j,p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
else if(p->birtnday.month>=10&&p->birtnday.day<10)
printf("%d.%s %s %s %d.%d.0%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",j,p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
else
printf("%d.%s %s %s %d.%d.%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",j,p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
i++;
p->num=j;
}
p=p->next;
}
if(j==0)
{
toxy(48,i);
printf("您输入的信息不存在!按0返回主菜单,1返回上一级菜单,2重新查找");
while(1)
{
t=getch();
if(t=='0')
{
menu();
}
else if(t=='1')
{
delete_information();
}
else if(t=='2')
{
break;
}
}
if(t=='2')
continue;
}
while(1)
{
toxy(50,i);
printf("请输入您要删除的信息的标号:");
scanf("%d",&key);
getchar();
i++;
if(key<=j) //如果c<=j,即输入正确
break;
else if(key>j) //否则,输入错误
{
toxy(50,i);
printf("没有找到您所要删除的信息,请重新输入!");
i++;
Sleep(500); //暂停0.5秒
}
}
toxy(46,16);
printf("-------------------------");
toxy(46,17);
printf("| |");
toxy(46,18);
printf("| 确认删除? |");
toxy(46,19);
printf("| 1.确认 2.取消 |");
toxy(46,20);
printf("| |");
toxy(46,21);
printf("-------------------------");
while(1)
{
p=head;
pre=NULL;
c=getch();
if(c=='1')
{
while(p!=NULL&&p->num!=key)
{
pre=p;
p=p->next;
}
if(p!=NULL)
{
if(pre==NULL)
head=head->next;
else
pre->next=p->next;
}
free(p);
break;
}
else if(c=='2')
delete_number();
}
system("cls");
toxy(45,10);
printf("正在删除....");
fp=fopen("student","wb");
if(fp==NULL)
{
printf("cannot open file");
}
if(head!=NULL&&fwrite(head,N,1,fp)!=1)
{
printf("write error");
}
fclose(fp);
if(head!=NULL)
{
p=head->next;
fp=fopen("student","ab");
if(fp==NULL)
{
printf("cannot open file");
}
while(p!=NULL)
{
if(fwrite(p,N,1,fp)!=1)
{
printf("write error");
}
p=p->next;
}
fclose(fp);
}
Sleep(500);
system("cls");
toxy(45,10);
printf("删除成功!正在返回....");
Sleep(500);
delete_information();
}while(1);
}
void print_information() //输出信息
{
system("cls");
color(11);
Stup head,p;
int i=11;
head=ss();
p=head;
toxy(45,6);
printf("-----学生档案管理系统-----");
toxy(20,8);
printf("----------------------------------------------------------------------------------------------");
toxy(20,9);
printf("学号 姓名 性别 出生--日期 c语言 高 数 俄 语 俄语听力 专业导论 政 治 备注");
toxy(20,10);
printf("----------------------------------------------------------------------------------------------");
while(p!=NULL)
{
toxy(20,i);
if(p->birtnday.month<10&&p->birtnday.day<10)
printf("%s %s %s %d.0%d.0%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
else if(p->birtnday.month<10&&p->birtnday.day>=10)
printf("%s %s %s %d.0%d.%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
else if(p->birtnday.month>=10&&p->birtnday.day<10)
printf("%s %s %s %d.%d.0%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
else
printf("%s %s %s %d.%d.%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
i++;
p=p->next;
}
toxy(45,i);
printf("按任意键返回主菜单!");
getch();
}
void find_information() //查找信息
{
do
{
system("cls");
char t;
color(10);
toxy(45,6);
printf("-----学生档案管理系统-----");
toxy(50,7);
printf("查找信息");
toxy(48,9);
printf("1) 学号查询");
toxy(48,11);
printf("2) 姓名查询");
toxy(48,13);
printf("按0返回主菜单");
t=getch();
switch(t)
{
case '0':menu();break;
case '1':find_number_information();break;
case '2':find_name_information();break;
default :break;
}
}while(1);
}
void find_number_information() //按学号查找
{
do
{
system("cls");
color(10);
char number[10];
char t;
int i=11,j=0;
Stup head,p;
toxy(48,9);
printf("请输入你要查找的学生的学号:");
gets(number);
head=ss();
p=head;
toxy(45,6);
printf("-----学生档案管理系统-----");
toxy(20,8);
printf("----------------------------------------------------------------------------------------------");
toxy(20,9);
printf("学号 姓名 性别 出生--日期 c语言 高 数 俄 语 俄语听力 专业导论 政 治 备注");
toxy(20,10);
printf("----------------------------------------------------------------------------------------------");
while(p!=NULL)
{
if(strcmp(p->number,number)==0)
{
toxy(20,i);
if(p->birtnday.month<10&&p->birtnday.day<10)
printf("%s %s %s %d.0%d.0%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
else if(p->birtnday.month<10&&p->birtnday.day>=10)
printf("%s %s %s %d.0%d.%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
else if(p->birtnday.month>=10&&p->birtnday.day<10)
printf("%s %s %s %d.%d.0%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
else
printf("%s %s %s %d.%d.%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
i++;
j++;
}
p=p->next;
}
if(j==0)
{
toxy(48,i);
printf("您输入的信息不存在!");
}
toxy(48,i+1);
printf("按0继续查找,按1返回");
while(1)
{
t=getch();
if(t=='0')
{
break;
}
else if(t=='1')
{
find_information();
}
}
}while(1);
}
void find_name_information() //按姓名查找
{
do
{
system("cls");
color(10);
char name[10];
char t;
int i=11,j=0;
Stup head,p;
toxy(48,9);
printf("请输入你要查找的学生的姓名:");
gets(name);
head=ss();
p=head;
toxy(45,6);
printf("-----学生档案管理系统-----");
toxy(20,8);
printf("----------------------------------------------------------------------------------------------");
toxy(20,9);
printf("学号 姓名 性别 出生--日期 c语言 高 数 俄 语 俄语听力 专业导论 政 治 备注");
toxy(20,10);
printf("----------------------------------------------------------------------------------------------");
while(p!=NULL)
{
if(strcmp(p->name,name)==0)
{
toxy(20,i);
if(p->birtnday.month<10&&p->birtnday.day<10)
printf("%s %s %s %d.0%d.0%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
else if(p->birtnday.month<10&&p->birtnday.day>=10)
printf("%s %s %s %d.0%d.%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
else if(p->birtnday.month>=10&&p->birtnday.day<10)
printf("%s %s %s %d.%d.0%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
else
printf("%s %s %s %d.%d.%d %.2f %.2f %.2f %.2f %.2f %.2f %s\n",p->number,p->name,p->sex,p->birtnday.year,p->birtnday.month,p->birtnday.day,p->score.c_language,p->score.math,p->score.Russian,p->score.Russian_hearing,p->score.professional,p->score.politics,p->remark);
i++;
j++;
}
p=p->next;
}
if(j==0)
{
toxy(48,i);
printf("您输入的信息不存在!");
}
toxy(48,i+1);
printf("按0继续查找,按1返回");
while(1)
{
t=getch();
if(t=='0')
{
break;
}
else if(t=='1')
{
find_information();
}
}
}while(1);
}
void assignment() //将链表的内容赋值给一个结构体数组
{
Stup head,p;
head=ss();
p=head;
int i=0;
while(p!=NULL)
{
strcpy(total[i].number,p->number);
strcpy(total[i].name,p->name);
strcpy(total[i].sex,p->sex);
total[i].c_language=p->score.c_language;
total[i].math=p->score.math;
total[i].Russian=p->score.Russian;
total[i].Russian_hearing=p->score.Russian_hearing;
total[i].professional=p->score.professional;
total[i].politics=p->score.politics;
total[i].sum=total[i].c_language+total[i].math+total[i].Russian+total[i].Russian_hearing+total[i].professional+total[i].politics;
i++;
p=p->next;
}
len=i;
}
void statistics_information() //数据统计
{
do
{
system("cls");
color(6);
char t;
toxy(45,6);
printf("-----学生档案管理系统-----");
toxy(50,7);
printf("数据统计");
toxy(48,9);
printf("1) 平均分");
toxy(48,11);
printf("2) 总分排名");
toxy(48,13);
printf("3) 各学科不及格人数");
toxy(48,15);
printf("4) 各科成绩分布分析");
toxy(45,17);
printf("按0返回主菜单");
t=getch();
switch(t)
{
case '0':menu();break;
case '1':average_score();break;
case '2':total_score_ranked();break;
case '3':fail_numbers();break;
case '4':grade_table();break;
default :break;
}
}while(1);
}
void average_score() //平均分
{
system("cls");
color(10);
float sum_c=0,sum_math=0,sum_Russian=0,sum_Russian_hearing=0,sum_professional=0,sum_politics=0;
float average_c,average_math,average_Russian,average_Russian_hearing,average_professional,average_politics;
int i=0;
Stup head,p;
head=ss();
p=head;
while(p!=NULL)
{
sum_c+=p->score.c_language;
sum_math+=p->score.math;
sum_Russian+=p->score.Russian;
sum_Russian_hearing+=p->score.Russian_hearing;
sum_professional+=p->score.professional;
sum_politics+=p->score.politics;
p=p->next;
i++;
}
average_c=sum_c*1.0/i;
average_math=sum_math*1.0/i;
average_Russian=sum_Russian*1.0/i;
average_Russian_hearing=sum_Russian_hearing*1.0/i;
average_professional=sum_professional*1.0/i;
average_politics=sum_politics*1.0/i;
toxy(45,6);
printf("-----学生档案管理系统-----");
toxy(48,7);
printf("各学科平均分");
toxy(30,8);
printf("----------------------------------------------------");
toxy(30,9);
printf(" c语言 高数 俄语 俄语听力 专业导论 政治");
toxy(30,10);
printf("----------------------------------------------------");
toxy(30,11);
printf(" %.2f %.2f %.2f %.2f %.2f %.2f",average_c,average_math,average_Russian,average_Russian_hearing,average_professional,average_politics);
toxy(45,12);
printf("总人数为:%d",i);
toxy(50,13);
printf("按任意键返回主菜单");
getch();
}
void total_score_ranked() //总分排名
{
system("cls");
color(10);
assignment();
int j,k=11;
qsort(total,len,sizeof(Total),cmp); //快速排序
toxy(45,6);
printf("-----学生档案管理系统-----");
toxy(48,7);
printf("总分排名");
toxy(20,8);
printf("--------------------------------------------------------------------------------------------");
toxy(20,9);
printf("学号 姓名 性别 c语言 高 数 俄 语 俄语听力 专业导论 政 治 总分 名次");
toxy(20,10);
printf("--------------------------------------------------------------------------------------------");
for(j=0;j<len;j++)
{
toxy(20,k);
printf("%s %s %s %.2f %.2f %.2f %.2f %.2f %.2f %.2f %d\n",total[j].number,total[j].name,total[j].sex,total[j].c_language,total[j].math,total[j].Russian,total[j].Russian_hearing,total[j].professional,total[j].politics,total[j].sum,j+1);
k++;
}
toxy(45,k);
printf("按任意键返回主菜单");
getch();
}
void fail_numbers() //各科不及格人数
{
system("cls");
color(10);
int fail_c=0,fail_math=0,fail_Russian=0,fail_Russian_hearing=0,fail_professional=0,fail_politics=0;
int i;
assignment();
for(i=0;i<len;i++)
{
if(total[i].c_language<60)
fail_c++;
if(total[i].math<60)
fail_math++;
if(total[i].Russian<60)
fail_Russian++;
if(total[i].Russian_hearing<60)
fail_Russian_hearing++;
if(total[i].professional<60)
fail_professional++;
if(total[i].politics<60)
fail_politics++;
}
toxy(45,6);
printf("-----学生档案管理系统-----");
toxy(48,7);
printf("各科不及格人数");
toxy(30,8);
printf("-----------------------------------------------------");
toxy(30,9);
printf("c语言 高 数 俄 语 俄语听力 专业导论 政 治");
toxy(30,10);
printf("-----------------------------------------------------");
toxy(30,11);
printf("%-10d%-10d%-10d%-10d%-10d%-10d",fail_c,fail_math,fail_Russian,fail_Russian_hearing,fail_professional,fail_politics);
toxy(45,12);
printf("请按任意键返回");
getch();
}
void grade_table() //各科各分数段人数信息统计
{
do
{
system("cls");
color(10);
char t;
toxy(45,6);
printf("-----学生档案管理系统-----");
toxy(50,7);
printf("各分数段统计");
toxy(48,9);
printf("(1) c语言");
toxy(48,11);
printf("(2) 高等数学");
toxy(48,13);
printf("(3) 俄语");
toxy(48,15);
printf("(4) 俄语听力");
toxy(48,17);
printf("(5) 专业导论");
toxy(48,19);
printf("(6) 政治");
toxy(48,21);
printf("按0返回上一级");
t=getch();
switch(t)
{
case '0':statistics_information();break;
case '1':analyze_c();break;
case '2':analyze_math();break;
case '3':analyze_Russian();break;
case '4':analyze_Russian_hearing();break;
case '5':analyze_professional();break;
case '6':analyze_politics();break;
default :break;
}
}while(1);
}
void analyze_c() //c语言
{
system("cls");
color(11);
assignment();
qsort(total,len,sizeof(Total),cmp1); //快速排序
int numbers_A=0,numbers_B=0,numbers_C=0,numbers_D=0,numbers_E=0;
int i,j,k=12;
for(i=0;i<len;i++)
{
switch((int)(total[i].c_language/10))
{
case 10:
case 9:numbers_A++;break;
case 8:numbers_B++;break;
case 7:numbers_C++;break;
case 6:numbers_D++;break;
default:numbers_E++;break;
}
}
toxy(45,6);
printf("-----学生档案管理系统-----");
toxy(50,7);
printf("c语言--各分数段统计");
toxy(36,9);
printf("-------------------------------------------------");
toxy(36,10);
printf("学号 姓名 性别 分数");
toxy(36,11);
printf("-------------------------------------------------");
toxy(18,12);
printf("90~100人数为:%d",numbers_A);
for(j=0;j<numbers_A;j++)
{
toxy(36,k);
printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].c_language);
k++;
}
k++;
toxy(18,k);
printf("80~90人数为:%d",numbers_B);
for(j=numbers_A;j<numbers_A+numbers_B;j++)
{
toxy(36,k);
printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].c_language);
k++;
}
k++;
toxy(18,k);
printf("70~80人数为:%d",numbers_C);
for(j=numbers_A+numbers_B;j<numbers_A+numbers_B+numbers_C;j++)
{
toxy(36,k);
printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].c_language);
k++;
}
k++;
toxy(18,k);
printf("60~70人数为:%d",numbers_D);
for(j=numbers_A+numbers_B+numbers_C;j<numbers_A+numbers_B+numbers_C+numbers_D;j++)
{
toxy(36,k);
printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].c_language);
k++;
}
k++;
toxy(18,k);
printf("0~60人数为:%d",numbers_E);
for(j=numbers_A+numbers_B+numbers_C+numbers_D;j<len;j++)
{
toxy(36,k);
printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].c_language);
k++;
}
toxy(48,k);
printf("按任意键返回上一级");
getch();
}
void analyze_math() //高数
{
system("cls");
color(11);
assignment();
qsort(total,len,sizeof(Total),cmp2); //快速排序
int numbers_A=0,numbers_B=0,numbers_C=0,numbers_D=0,numbers_E=0;
int i,j,k=12;
for(i=0;i<len;i++)
{
switch((int)(total[i].math/10))
{
case 10:
case 9:numbers_A++;break;
case 8:numbers_B++;break;
case 7:numbers_C++;break;
case 6:numbers_D++;break;
default:numbers_E++;break;
}
}
toxy(45,6);
printf("-----学生档案管理系统-----");
toxy(50,7);
printf("高数--各分数段统计");
toxy(36,9);
printf("-------------------------------------------------");
toxy(36,10);
printf("学号 姓名 性别 分数");
toxy(36,11);
printf("-------------------------------------------------");
toxy(18,12);
printf("90~100人数为:%d",numbers_A);
for(j=0;j<numbers_A;j++)
{
toxy(36,k);
printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].math);
k++;
}
k++;
toxy(18,k);
printf("80~90人数为:%d",numbers_B);
for(j=numbers_A;j<numbers_A+numbers_B;j++)
{
toxy(36,k);
printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].math);
k++;
}
k++;
toxy(18,k);
printf("70~80人数为:%d",numbers_C);
for(j=numbers_A+numbers_B;j<numbers_A+numbers_B+numbers_C;j++)
{
toxy(36,k);
printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].math);
k++;
}
k++;
toxy(18,k);
printf("60~70人数为:%d",numbers_D);
for(j=numbers_A+numbers_B+numbers_C;j<numbers_A+numbers_B+numbers_C+numbers_D;j++)
{
toxy(36,k);
printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].math);
k++;
}
k++;
toxy(18,k);
printf("0~60人数为:%d",numbers_E);
for(j=numbers_A+numbers_B+numbers_C+numbers_D;j<len;j++)
{
toxy(36,k);
printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].math);
k++;
}
toxy(48,k);
printf("按任意键返回上一级");
getch();
}
void analyze_Russian() //俄语
{
system("cls");
color(11);
assignment();
qsort(total,len,sizeof(Total),cmp3); //快速排序
int numbers_A=0,numbers_B=0,numbers_C=0,numbers_D=0,numbers_E=0;
int i,j,k=12;
for(i=0;i<len;i++)
{
switch((int)(total[i].Russian/10))
{
case 10:
case 9:numbers_A++;break;
case 8:numbers_B++;break;
case 7:numbers_C++;break;
case 6:numbers_D++;break;
default:numbers_E++;break;
}
}
toxy(45,6);
printf("-----学生档案管理系统-----");
toxy(50,7);
printf("俄语--各分数段统计");
toxy(36,9);
printf("-------------------------------------------------");
toxy(36,10);
printf("学号 姓名 性别 分数");
toxy(36,11);
printf("-------------------------------------------------");
toxy(18,12);
printf("90~100人数为:%d",numbers_A);
for(j=0;j<numbers_A;j++)
{
toxy(36,k);
printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].Russian);
k++;
}
k++;
toxy(18,k);
printf("80~90人数为:%d",numbers_B);
for(j=numbers_A;j<numbers_A+numbers_B;j++)
{
toxy(36,k);
printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].Russian);
k++;
}
k++;
toxy(18,k);
printf("70~80人数为:%d",numbers_C);
for(j=numbers_A+numbers_B;j<numbers_A+numbers_B+numbers_C;j++)
{
toxy(36,k);
printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].Russian);
k++;
}
k++;
toxy(18,k);
printf("60~70人数为:%d",numbers_D);
for(j=numbers_A+numbers_B+numbers_C;j<numbers_A+numbers_B+numbers_C+numbers_D;j++)
{
toxy(36,k);
printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].Russian);
k++;
}
k++;
toxy(18,k);
printf("0~60人数为:%d",numbers_E);
for(j=numbers_A+numbers_B+numbers_C+numbers_D;j<len;j++)
{
toxy(36,k);
printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].Russian);
k++;
}
toxy(48,k);
printf("按任意键返回上一级");
getch();
}
void analyze_Russian_hearing() //俄语听力
{
system("cls");
color(11);
assignment();
qsort(total,len,sizeof(Total),cmp4); //快速排序
int numbers_A=0,numbers_B=0,numbers_C=0,numbers_D=0,numbers_E=0;
int i,j,k=12;
for(i=0;i<len;i++)
{
switch((int)(total[i].Russian_hearing/10))
{
case 10:
case 9:numbers_A++;break;
case 8:numbers_B++;break;
case 7:numbers_C++;break;
case 6:numbers_D++;break;
default:numbers_E++;break;
}
}
toxy(45,6);
printf("-----学生档案管理系统-----");
toxy(50,7);
printf("俄语听力--各分数段统计");
toxy(36,9);
printf("-------------------------------------------------");
toxy(36,10);
printf("学号 姓名 性别 分数");
toxy(36,11);
printf("-------------------------------------------------");
toxy(18,12);
printf("90~100人数为:%d",numbers_A);
for(j=0;j<numbers_A;j++)
{
toxy(36,k);
printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].Russian_hearing);
k++;
}
k++;
toxy(18,k);
printf("80~90人数为:%d",numbers_B);
for(j=numbers_A;j<numbers_A+numbers_B;j++)
{
toxy(36,k);
printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].Russian_hearing);
k++;
}
k++;
toxy(18,k);
printf("70~80人数为:%d",numbers_C);
for(j=numbers_A+numbers_B;j<numbers_A+numbers_B+numbers_C;j++)
{
toxy(36,k);
printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].Russian_hearing);
k++;
}
k++;
toxy(18,k);
printf("60~70人数为:%d",numbers_D);
for(j=numbers_A+numbers_B+numbers_C;j<numbers_A+numbers_B+numbers_C+numbers_D;j++)
{
toxy(36,k);
printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].Russian_hearing);
k++;
}
k++;
toxy(18,k);
printf("0~60人数为:%d",numbers_E);
for(j=numbers_A+numbers_B+numbers_C+numbers_D;j<len;j++)
{
toxy(36,k);
printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].Russian_hearing);
k++;
}
toxy(48,k);
printf("按任意键返回上一级");
getch();
}
void analyze_professional() //专业导论
{
system("cls");
color(11);
assignment();
qsort(total,len,sizeof(Total),cmp5); //快速排序
int numbers_A=0,numbers_B=0,numbers_C=0,numbers_D=0,numbers_E=0;
int i,j,k=12;
for(i=0;i<len;i++)
{
switch((int)(total[i].professional/10))
{
case 10:
case 9:numbers_A++;break;
case 8:numbers_B++;break;
case 7:numbers_C++;break;
case 6:numbers_D++;break;
default:numbers_E++;break;
}
}
toxy(45,6);
printf("-----学生档案管理系统-----");
toxy(50,7);
printf("专业导论--各分数段统计");
toxy(36,9);
printf("-------------------------------------------------");
toxy(36,10);
printf("学号 姓名 性别 分数");
toxy(36,11);
printf("-------------------------------------------------");
toxy(18,12);
printf("90~100人数为:%d",numbers_A);
for(j=0;j<numbers_A;j++)
{
toxy(36,k);
printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].professional);
k++;
}
k++;
toxy(18,k);
printf("80~90人数为:%d",numbers_B);
for(j=numbers_A;j<numbers_A+numbers_B;j++)
{
toxy(36,k);
printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].professional);
k++;
}
k++;
toxy(18,k);
printf("70~80人数为:%d",numbers_C);
for(j=numbers_A+numbers_B;j<numbers_A+numbers_B+numbers_C;j++)
{
toxy(36,k);
printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].professional);
k++;
}
k++;
toxy(18,k);
printf("60~70人数为:%d",numbers_D);
for(j=numbers_A+numbers_B+numbers_C;j<numbers_A+numbers_B+numbers_C+numbers_D;j++)
{
toxy(36,k);
printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].professional);
k++;
}
k++;
toxy(18,k);
printf("0~60人数为:%d",numbers_E);
for(j=numbers_A+numbers_B+numbers_C+numbers_D;j<len;j++)
{
toxy(36,k);
printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].professional);
k++;
}
toxy(48,k);
printf("按任意键返回上一级");
getch();
}
void analyze_politics() //政治
{
system("cls");
color(11);
assignment();
qsort(total,len,sizeof(Total),cmp6); //快速排序
int numbers_A=0,numbers_B=0,numbers_C=0,numbers_D=0,numbers_E=0;
int i,j,k=12;
for(i=0;i<len;i++)
{
switch((int)(total[i].politics/10))
{
case 10:
case 9:numbers_A++;break;
case 8:numbers_B++;break;
case 7:numbers_C++;break;
case 6:numbers_D++;break;
default:numbers_E++;break;
}
}
toxy(45,6);
printf("-----学生档案管理系统-----");
toxy(50,7);
printf("政治--各分数段统计");
toxy(36,9);
printf("-------------------------------------------------");
toxy(36,10);
printf("学号 姓名 性别 分数");
toxy(36,11);
printf("-------------------------------------------------");
toxy(18,12);
printf("90~100人数为:%d",numbers_A);
for(j=0;j<numbers_A;j++)
{
toxy(36,k);
printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].politics);
k++;
}
k++;
toxy(18,k);
printf("80~90人数为:%d",numbers_B);
for(j=numbers_A;j<numbers_A+numbers_B;j++)
{
toxy(36,k);
printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].politics);
k++;
}
k++;
toxy(18,k);
printf("70~80人数为:%d",numbers_C);
for(j=numbers_A+numbers_B;j<numbers_A+numbers_B+numbers_C;j++)
{
toxy(36,k);
printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].politics);
k++;
}
k++;
toxy(18,k);
printf("60~70人数为:%d",numbers_D);
for(j=numbers_A+numbers_B+numbers_C;j<numbers_A+numbers_B+numbers_C+numbers_D;j++)
{
toxy(36,k);
printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].politics);
k++;
}
k++;
toxy(18,k);
printf("0~60人数为:%d",numbers_E);
for(j=numbers_A+numbers_B+numbers_C+numbers_D;j<len;j++)
{
toxy(36,k);
printf("%s %s %s %.2f",total[j].number,total[j].name,total[j].sex,total[j].politics);
k++;
}
toxy(48,k);
printf("按任意键返回上一级");
getch();
}
void save_information(Stup p) //将p所指向的内容写入文件中
{
FILE *fp;
fp=fopen("student","ab+");
if(fp==NULL)
{
printf("cannot open file");
}
if(fwrite(p,N,1,fp)!=1)
{
printf("write error");
}
fclose(fp);
}
void over() //退出软件
{
char t;
toxy(45,11);
printf("--------------------------");
toxy(45,12);
printf("| 您确定要退出吗? |");
toxy(45,14);
printf("| 1.确定 2.取消 |");
toxy(45,15);
printf("--------------------------");
while(1)
{
t=getch(); //输入t
switch(t)
{
case '1':
system("cls");
color(6);
toxy(48,10);
printf("正在安全退出....");
Sleep(1000); //暂停1秒
system("cls");
color(8);
toxy(48,10);
printf("已安全退出软件");
toxy(48,12);
printf("谢谢使用!");
toxy(48,14);
printf("by-by^_^");
free(password_head);
exit(0); break; //终止程序
case '2':
menu(); break; //调用函数,进入菜单
default :break;
}
}
}
main() //简单明了的主函数^_^
{
HideCursor();
signin(); //登录界面
}