#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
#include<conio.h>
#define H "--------------------------------------------------------------------------\n"
#define H1 "| 学号 | 姓名 | 班级 |c语言 |数学 | 英语 | 总成绩 |\n"
#define H2 "|-----------|---------|----------|-------|-------|-------|--------|\n"
#define H3 "|---------------------|----------|-------|-------|-------|--------|--------|\n"
using namespace std;
struct student
{
char name[20];//姓名
char num[20]; //学号
char cla[20]; //班级
double sum; //总成绩
double math;
double english;
double c_sno;
}students[500];
bool Pudan(int num)
{
if(num>=0&&num<=100)
return true;
return false;
}
bool cmp(student s1,student s2) //总成绩比较
{
return s1.sum>s2.sum;
}
int Sort(int cmd) //成绩比较函数
{
student stu;
FILE *fp=fopen("D:\\inform.txt","ab+");
int n,cnt=0;
while((n=fread(&stu,sizeof(stu),1,fp)>0))
{
students[cnt++]=stu;
}
fclose(fp);
sort(students,students+cnt,cmp);
return cnt;
}
void help()
{
puts("本系统为简单的成绩管理系统,按(0~6)分别执行相应功能");
printf("\t\t按0返回主菜单:");
}
void menu()//菜单选择函数
{
printf("\n\n\n\n <><><><><> 欢 迎 来 到 学 生 成 绩 管 理 系统 <><><><><>\n\n");
printf(" * * * * * * * * * * * * * * * * * * * *\n");
printf(" * * * * * * * * * * *\n");
printf(" * 1---> * 录 入 成 绩 * *\n");
printf(" * * * * * * * * * * *\n");
printf(" * * * * * * * * * * *\n");
printf(" * 2---> * 学生成绩查询 * *\n");
printf(" * * * * * * * * * * *\n");
printf(" * * * * * * * * * * *\n");
printf(" * 3---> * 学生成绩显示 * *\n");
printf(" * * * * * * * * * * *\n");
printf(" * * * * * * * * * * *\n");
printf(" * 4---> * 学生成绩修改 * *\n");
printf(" * * * * * * * * * * *\n");
printf(" * * * * * * * * * * *\n");
printf(" * 5---> *学生成绩删除 * *\n");
printf(" * * * * * * * * * * *\n");
printf(" * 6--> Help 0--> 返回主菜单 *\n");
printf(" * * * * * * * * * * * * * * * * * * * *\n");
printf("\t请输入您想要使用的功能(0 - 6)");
}
void add()//信息输入函数
{
struct student stu;
FILE * fp;
char ch[2];
if((fp=fopen("D:\\inform.txt","ab"))==NULL)
{
printf("\tCan not open the inform file!");
getch();
exit(1);
}
do
{getchar();
printf("\t请输入学号:");gets(stu.num);
printf("\t请输入姓名:");gets(stu.name);
printf("\t请输入班级:");gets(stu.cla);
printf("\t请按顺序输入学生的c语言成绩,数学成绩和英语成绩:");
scanf("%lf",&stu.c_sno);
while(Pudan(stu.c_sno)!=true)
{
printf("\t输入不合法,请重新输入:");
scanf("%lf",&stu.c_sno);
}
scanf("%lf",&stu.math);
while(Pudan(stu.math)!=true)
{
printf("\t输入不合法,请重新输入:");
scanf("%lf",&stu.math);
}
scanf("%lf",&stu.english);
while(Pudan(stu.english)!=true)
{
printf("\t输入不合法,请重新输入:");
scanf("%lf",&stu.english);
}
stu.sum=stu.c_sno+stu.math+stu.english;
fwrite(&stu,sizeof(stu),1,fp);
printf("\t是否继续添加?(Y/N):");
getchar();
scanf("%s",ch);
}while(ch[0]=='Y'||ch[0]=='y');
fclose(fp);
}
void print1() //输出函数
{
printf(H);
printf(H1);
printf(H2);
}
void print2(struct student stu) //输出函数
{
printf("|%-11s|%-9s|%-10s|%-7.2lf|%-7.2lf|%-7.2lf|%-8.2lf|\n",stu.num,stu.name,stu.cla,stu.c_sno,stu.math,stu.english,stu.sum);
printf(H2);
}
void x_s() //信息显示函数
{
struct student stu;
FILE *fp;
int total=0;
if((fp=fopen("D:\\inform.txt","rb"))==NULL)
{
printf("\tCan not open the inform file!");
getch();
exit(1);
}
while(fread(&stu,sizeof(stu),1,fp)==1)
{
total++;
if(total==1)print1();
print2(stu);
}
puts("\t任意键继续....");
fclose(fp);
getch();
}
void Search() //信息查询函数
{
struct student stu;
FILE *fp;
int flag;
int total=0;
char ch[10];
char f[10];
if((fp=fopen("D:\\inform.txt","rb"))==NULL)
{
printf("\tCan not open the inform file!");
getch();
exit(1);
}
do
{
rewind(fp);
printf("请输入您想要查询的学号:"); getchar();
gets(ch);
total=0;
while(fread(&stu,sizeof(stu),1,fp)==1)
if(strcmp(ch,stu.num)==0)
{
total++;
if(total==1)
print1();
print2(stu);
}
printf("Search any more?(Y/N):");
scanf("%s",f);
}while(f[0]=='Y'||f[0]=='y');
fclose(fp);
}
void X_G() //信息修改函数
{
struct student stu;
FILE *fp1,*fp2;
int flag;
char ch[15];
char f[10];
do
{
if((fp1=fopen("D://inform.txt","rb"))==NULL)
{
printf("\tCan not open the inform file!");
getch();
exit(1);
}
if((fp2=fopen("D://temp.txt","wb"))==NULL)
{
printf("\tCan not creat the temp file!");
getch();
exit(1);
}
printf("请输入您想要修改信息的学号:");getchar();
gets(ch);
flag=0;
while(fread(&stu,sizeof(stu),1,fp1)==1)
{
if(strcmp(ch,stu.num)==0)
{
print1();
print2(stu); //getchar();
printf("\n\n请输入新的信息:\n");
printf("\t学号:");gets(stu.num);
printf("\t姓名:");gets(stu.name);
printf("\t班级:");gets(stu.cla);
printf("\t请按顺序输入c语言成绩、数学成绩、英语成绩:");
scanf("%lf%lf%lf",&stu.c_sno,&stu.math,&stu.english);
stu.sum=stu.c_sno+stu.math+stu.english;
getchar();
flag=1;
}
fwrite(&stu,sizeof(stu),1,fp2);
}
fclose(fp1);
fclose(fp2);
if(flag==1)
{
printf("修改成功!\n");
remove("D://inform.txt");
rename("D://temp.txt","D://inform.txt");
}
else
printf("对不起 %>_<%,找不到这项纪录!\n");
printf("是否要继续修改?(Y/N):");
scanf("%s",f);
}while(f[0]=='Y'||f[0]=='y');
}
void Delete() //信息删除函数
{
struct student stu;
FILE *fp1,*fp2;
int flag;
char ch[10];
char f[10];
do
{
if((fp1=fopen("D://inform.txt","rb"))==NULL)
{
printf("\tCan not open the inform file!");
getch();
exit(1);
}
if((fp2=fopen("D://temp.txt","wb"))==NULL)
{
printf("\tCan not creat the temp file!");
getch();
exit(1);
}
printf("请输入您想要删除信息的学号:");
getchar();
gets(ch);
flag=0;
while(fread(&stu,sizeof(stu),1,fp1)==1)
{
if(strcmp(ch,stu.num)==0)
{
print1();
print2(stu);
flag=1;
}
else
fwrite(&stu,sizeof(stu),1,fp2);
}
fclose(fp1);
fclose(fp2);
if(flag==1)
{
printf("删除成功!\n");
remove("D://inform.txt");
rename("D://temp.txt","D://inform.txt");
}
else
printf("Can not find this record!\n");
printf("Delete any more?(Y/N)");
scanf("%s",f[0]);
}while(f[0]=='Y'||f[0]=='y');
}
int main()
{
system("color 0b");
menu();
int num;
while(1)
{
while(1)
{
scanf("%d",&num);
if(num<0||num>6)
printf("输入错误,请您重新输入选项(0-6):");
else
break;
}system("CLS");
switch(num)
{
case 1:add();break;
case 2:Search();break;
case 3:x_s();break;
case 4:X_G();break;
case 5:Delete();break;
case 6:help();break;
case 0:menu();break;
}
if(num!=6){
system("CLS");
menu();
}
}
return 0;
}