原文地址为:
c语言制作的学生成绩管理系统 加链表
转载请注明本文地址: c语言制作的学生成绩管理系统 加链表
/*--------------------data.txt文件是存储学生成绩信息的文件---------------------------*/
/*--------------------time.txt文件是存储备份时间的文件-------------------------------*/
/*--------------------备份文件的文件名字需要自己输入---------------------------------*/
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#include<time.h> // 必须的时间函数头文件
#define BACKSPACE 8
#define N 3
#define LEN (linklist *)malloc(sizeof(linklist))
#define PRINTF printf("学号 系院 班级 姓名 数学 语文 英语 总分\n")
#define PRINTF1 printf("学号 系院 班级 姓名 数学\n")
#define PRINTF2 printf("学号 系院 班级 姓名 语文\n")
#define PRINTF3 printf("学号 系院 班级 姓名 英语\n")
typedef struct node
{
char snum[18]; // 学号
char xueyuan[21]; // 系院
char classr[15];
char sname[15]; //姓名
float score[N]; // 分数
float sum; //总分
struct node *next;
}linklist;
int main()
{
int n;
void menu(); // 主菜单
void login(); // 登录界面
void zi_menu(); // 前台查询学生成绩下的菜单
menu(); // 主菜单函数
scanf("%d",&n);
switch(n)
{
case 1:
zi_menu(); //显示所以学生信息
break;
case 2:
login(); // 登录界面
break;
default:break;
}
return 0;
}
/*----------------主菜单界面函数----------------------------*/
void menu()
{
system("cls");
printf("\n\n\n\n");
printf("\t\t|---------------------主菜单------------------|\n");
printf("\t\t|---------------按下面数字选择操作------------|\n");
printf("\t\t|\t1. 查看学生成绩 |\n");
printf("\t\t|\t2. 后台登录 |\n");
printf("\t\t|\t0. 退出 |\n");
printf("\t\t|---------------------------------------------|\n");
printf("请输入所选操作:");
}
/*---------------登录后的菜单页面---------------------*/
void login_menu()
{
int n,m;
linklist *creat(); // 创建链表 数据添加
void view(int); // 查找所有数据函数
void delete_student(); // 删除某一条学生信息
void update(); // 修改某一条学生信息
void search(); // 查询某一条学生的信息
void beifen(); // 备份函数
void show_beifen(); // 查看备份信息
void sort_score(); //
system("cls"); // 清屏
printf("\n\n\n\n");
printf("\t\t|---------------------主菜单------------------|\n");
printf("\t\t|---------------按下面数字选择操作------------|\n");
printf("\t\t|\t1. 添加学生成绩 |\n");
printf("\t\t|\t2. 查看学生成绩 |\n");
printf("\t\t|\t3. 删除学生成绩 |\n");
printf("\t\t|\t4. 修改学生成绩 |\n");
printf("\t\t|\t5. 查找某一条学生信息 |\n");
printf("\t\t|\t6. 备份文件 |\n");
printf("\t\t|\t7. 查看备份文件的学生信息 |\n");
printf("\t\t|\t0. 退出 |\n");
printf("\t\t|---------------------------------------------|\n");
printf("请输入所选操作:");
scanf("%d",&n);
switch(n)
{
case 1:
creat(); // 创建链表 数据添加
break;
case 2:
printf("1.查看学生的全部成绩信息\n");
printf("2.查看所有的数学成绩信息\n");
printf("3.查看所有生的语文成绩信息\n");
printf("4.查看所有生的英语成绩信息\n");
printf("0.退出\n");
printf("请输入你的选项:");
scanf("%d",&m);
view(m); // 查找所有数据函数
break;
case 0:
return;
break;
case 3:
delete_student(); // 删除某一条学生信息
break;
case 4:
update(); // 修改某一条学生的信息
break;
case 5:
search(); // 查询某一条学生的信息
break;
case 6:
beifen(); // 备份
break;
case 7:
show_beifen();
break;
default:break;
}
printf("按任意键返回主菜单");
getch();
login_menu();
}
/*-------------------前台子菜单----------------------*/
void zi_menu()
{
int n,m;
void view(int);
void search();
printf("1.查看学生的成绩信息\n");
printf("2.按条件查询学生信息\n");
printf("请输入你要查询的数字:");
scanf("%d",&n);
switch(n)
{
case 1:
printf("1.查看学生的全部成绩信息\n");
printf("2.查看所有的数学成绩信息\n");
printf("3.查看所有生的语文成绩信息\n");
printf("4.查看所有生的英语成绩信息\n");
printf("0.退出\n");
printf("请输入你的选项:");
scanf("%d",&m);
view(m); // 查找所有数据函数
break;
case 2:
search();
break;
default:break;
}
printf("按任意键返回主菜单");
getch();
main();
}
/*----------- 登录验证--------------------------*/
void login()
{
char username[25],password[20],ch;
int i;
do{
i=0;
system("cls");
printf("\n\n\n\n");
printf("\t\t|---------------------主菜单------------------|\n");
printf("\t\t\t 用户名:");
scanf("%s",username);
printf("\t\t\t 密 码:");
/*---------------把输入密码框变成*---------------*/
while((ch=getch())!='\r')
{
if (ch == BACKSPACE)
{
if (i > 0)
{
password[--i] = NULL;
printf("\b ");
printf("%c%c%c", BACKSPACE, ' ', BACKSPACE);
}
else
putchar(7);
}else{
printf("*");
password[i++]=ch;
}
}
/*------------------------------------------*/
password[i]='\0';
printf("\n");
printf("\t\t|---------------------------------------------|\n");
if(strcmp(username,"huangjianxiang")!=0 || strcmp(password,"huangjianxiang")!=0)
{
printf("用户名或者密码错误,按任意键重新输入\n");
getch();
}else{
login_menu();
}
}while(strcmp(username,"huangjianxiang")!=0 || strcmp(password,"huangjianxiang")!=0);
}
/*-------------------创建链表,添加数据---------------------*/
linklist *creat()
{
system("cls");
FILE *fp;
int i;
char ch[2];
void view(int);
linklist *r,*s,*head;
head=LEN;
r=head;
view(1);
printf("是否添加学生成绩信息(Y/N):");
scanf("%s",ch);
while(strcmp(ch,"Y")==0 || strcmp(ch,"y")==0)
{
system("cls");
view(1);
if((fp=fopen("data.txt","a+"))==NULL)
{
printf("打开失败\n");
return 0;
}
s=LEN;
s->sum=0;
printf("请输入学号:");
scanf("%s",s->snum);
fscanf(fp,"%s%s%s%s",head->snum,head->xueyuan,head->classr,head->sname);
for(i=0;i<N;i++)
fscanf(fp,"%f",&head->score[i]);
fscanf(fp,"%f",&head->sum);
while(feof(fp)==0)
{
if(strcmp(head->snum,s->snum)==0)
{
printf("该学号已经存在\n");
fclose(fp);
return 0;
}
fscanf(fp,"%s%s%s%s",head->snum,head->sname,head->classr,head->xueyuan);
for(i=0;i<N;i++)
fscanf(fp,"%f",&head->score[i]);
fscanf(fp,"%f",&head->sum);
}
printf("请输入学院:");
scanf("%s",s->xueyuan);
printf("请输入班级:");
scanf("%s",s->classr);
printf("请输入姓名:");
scanf("%s",s->sname);
fprintf(fp,"%s %s %s %s ",s->snum,s->xueyuan,s->classr,s->sname);
printf("请输入数学成绩:");
scanf("%f",&s->score[0]);
printf("请输入语文成绩:");
scanf("%f",&s->score[1]);
printf("请输入英语成绩:");
scanf("%f",&s->score[2]);
for(i=0;i<N;i++)
{
s->sum+=(s->score[i]);
fprintf(fp,"%f ",s->score[i]);
}
fprintf(fp,"%f ",s->sum);
printf("保存成功\n");
fclose(fp);
printf("是否继续添加(Y/N):");
r->next=s;
r=s;
scanf("%s",ch);
}
r->next=NULL;
return head;
}
/*---------------------显示所有成绩信息----------------------*/
void view(int n)
{
FILE *fp;
int i,m=0,j=0,jige=0,youxiu=0,z,y;
linklist *head,*r,*p,*q;
float sum=0;
if(n==0)
return;
system("cls");
if((fp=fopen("data.txt","r"))==NULL)
{
printf("打开文件失败,可能是此文件不存在\n");
return;
}
head=LEN;
r=head;
p=LEN;
fscanf(fp,"%s%s%s%s",p->snum,p->xueyuan,p->classr,p->sname);
for(i=0;i<N;i++)
fscanf(fp,"%f",&p->score[i]);
fscanf(fp,"%f",&p->sum);
while(!feof(fp))
{
r->next=p;
r=p;
p=LEN;
fscanf(fp,"%s%s%s%s",p->snum,p->xueyuan,p->classr,p->sname);
for(i=0;i<N;i++)
fscanf(fp,"%f",&p->score[i]);
fscanf(fp,"%f",&p->sum);
m++;
}
r->next=NULL;
fclose(fp);
printf("一共有%d条记录\n",m);
if(m==0)
{
printf("目前尚未添加记录\n");
return;
}
if(n==1) PRINTF;
if(n==2) PRINTF1;
if(n==3) PRINTF2;
if(n==4) PRINTF3;
for(z=1;z<=m-1;z++)
{
r=head;
q=r->next;
p=q->next;
for(y=1;y<=m-z;y++)
{
if(n==1)
{
if(q->sum < p->sum)
{
r->next=p;
q->next=p->next;
p->next=q;
r=p;
p=q->next;
}
else
{
r=q;
q=p;
p=p->next;
}
}
if(n==2)
{
if(q->score[0] < p->score[0])
{
r->next=p;
q->next=p->next;
p->next=q;
r=p;
p=q->next;
}
else
{
r=q;
q=p;
p=p->next;
}
}
if(n==3)
{
if(q->score[1] < p->score[1])
{
r->next=p;
q->next=p->next;
p->next=q;
r=p;
p=q->next;
}
else
{
r=q;
q=p;
p=p->next;
}
}
if(n==4)
{
if(q->score[2] < p->score[2])
{
r->next=p;
q->next=p->next;
p->next=q;
r=p;
p=q->next;
}
else
{
r=q;
q=p;
p=p->next;
}
}
}
}
p=head->next;
while(p)
{
if(n==1)
{
printf("%-14s%-14s%-12s%-13s",p->snum,p->xueyuan,p->classr,p->sname);
for(i=0;i<N;i++)
printf("%-7.1f",p->score[i]);
printf("%-7.1f",p->sum);
}
if(n==2)
{
printf("%-14s%-14s%-12s%-13s",p->snum,p->xueyuan,p->classr,p->sname);
printf("%-7.1f",p->score[0]);
sum+=p->score[0];
j++;
if(p->score[0]>=80)
youxiu++;
if(p->score[0]>=60)
jige++;
}
if(n==3)
{
printf("%-14s%-14s%-12s%-13s",p->snum,p->xueyuan,p->classr,p->sname);
printf("%-7.1f",p->score[1]);
sum+=p->score[1];
j++;
if(p->score[1]>=80)
youxiu++;
if(p->score[1]>=60)
jige++;
}
if(n==4)
{
printf("%-14s%-14s%-12s%-13s",p->snum,p->xueyuan,p->classr,p->sname);
printf("%-7.1f",p->score[2]);
sum+=p->score[2];
j++;
if(p->score[2]>=80)
youxiu++;
if(p->score[2]>=60)
jige++;
}
printf("\n");
p=p->next;
}
if(n==2 || n==3 || n==4)
{
printf("平均分是%-7.2f\n",sum/j);
printf("优秀:%d\n",youxiu);
printf("及格:%d\n",jige);
printf("优秀率:%-4.2f%%\n",(youxiu/float(j))*100);
printf("及格率:%-4.2f%%\n",(jige/float(j))*100);
}
fclose(fp);
}
/*--------------------删x除某一条记录,按学号或者姓名删除--------------------*/
void delete_student()
{
FILE *fp;
int i,n,m,c;
char number[20],ch[2],name[20];
linklist *head,*p,*r,*q;
system("cls");
loop: printf("1.按学生学号删除\n");
printf("2.按学生姓名删除\n");
printf("请输入你的选项:");
scanf("%d",&n);
if(n!=1 && n!=2)
{
printf("输入的选项不存在,请重新操作\n");
goto loop;
}
view(1);
head=LEN;
printf("是否删除学生信息(Y/N):");
scanf("%s",ch);
while(strcmp(ch,"Y")==0 || strcmp(ch,"y")==0)
{
m=0;
c=0;
if((fp=fopen("data.txt","r"))==NULL)
{
printf("打开文件失败\n");
return;
}
r=head;
p=LEN;
fscanf(fp,"%s%s%s%s",p->snum,p->xueyuan,p->classr,p->sname);
for(i=0;i<N;i++)
fscanf(fp,"%f",&p->score[i]);
fscanf(fp,"%f",&p->sum);
while(feof(fp)==0)
{
m++;
r->next=p;
r=p;
p=LEN;
fscanf(fp,"%s%s%s%s",p->snum,p->xueyuan,p->classr,p->sname);
for(i=0;i<N;i++)
fscanf(fp,"%f",&p->score[i]);
fscanf(fp,"%f",&p->sum);
}
r->next=NULL;
fclose(fp);
p=head;
q=head->next;
if(n==1)
{
printf("请输入要删除的学号:");
scanf("%s",number);
}
if(n==2)
{
printf("请输入要删除的学生姓名:");
scanf("%s",name);
}
while(q)
{
if((strcmp(q->snum,number)!=0 && n==1) || (strcmp(q->sname,name)!=0 && n==2)) // 如果n=1是按学号删除 如果n=2 是按姓名删除
{
q=q->next;
p=p->next;
c++;
}
else{
p->next=q->next;
free(q);
break;
}
}
if(c==m && n==1)
{
printf("此学号不存在,请重新输入\n");
}else if(c==m && n==2){
printf("此姓名不存在,请重新输入\n");
}else{
if((fp=fopen("data.txt","w"))==NULL)
{
printf("打开文件失败!");
return;
}
q=head->next;
while(q)
{
fprintf(fp,"%s %s %s %s ",q->snum,q->xueyuan,q->classr,q->sname);
for(i=0;i<N;i++)
fprintf(fp,"%f ",q->score[i]);
fprintf(fp,"%f ",q->sum);
q=q->next;
}
fclose(fp);
printf("信息删除成功\n");
view(1);
}
printf("是否继续删除学生信息(Y/N):");
scanf("%s",ch);
}
}
/*-----------------------------修改学生信息-------------------------------*/
void update()
{
FILE *fp;
int i,n,c,m;
float totalscore;
char ch[2],number[20],name[20];
linklist *head,*p,*r,*q;
system("cls");
loop: printf("1.按学生学号修改\n");
printf("2.按学生姓名修改\n");
printf("请输入你的选项:");
scanf("%d",&n);
if(n!=1 && n!=2)
{
printf("输入的选项不存在,请重新操作\n");
goto loop;
}
view(1);
head=LEN;
printf("是否修改学生信息(Y/N):");
scanf("%s",ch);
while(strcmp(ch,"Y")==0 || strcmp(ch,"y")==0)
{
c=0;
m=0;
if((fp=fopen("data.txt","r"))==NULL)
{
printf("打开文件失败\n");
return;
}
r=head;
p=LEN;
fscanf(fp,"%s%s%s%s",p->snum,p->xueyuan,p->classr,p->sname);
for(i=0;i<N;i++)
fscanf(fp,"%f",&p->score[i]);
fscanf(fp,"%f",&p->sum);
while(feof(fp)==0)
{
m++;
r->next=p;
r=p;
p=LEN;
fscanf(fp,"%s%s%s%s",p->snum,p->xueyuan,p->classr,p->sname);
for(i=0;i<N;i++)
fscanf(fp,"%f",&p->score[i]);
fscanf(fp,"%f",&p->sum);
}
r->next=NULL;
fclose(fp);
q=head->next;
if(n==1)
{
printf("请输入要修改的学号:");
scanf("%s",number);
}
if(n==2)
{
printf("请输入要修改的学生姓名:");
scanf("%s",name);
}
while(q)
{
if((strcmp(q->snum,number)!=0 && n==1) || (strcmp(q->sname,name)!=0 && n==2)) // 如果n=1是按学号修改 如果n=2 是按姓名修改
{
q=q->next;
c++;
}else{
printf("请输入新的学号:");
scanf("%s",q->snum);
printf("请输入学院:");
scanf("%s",q->xueyuan);
printf("请输入班级:");
scanf("%s",q->classr);
printf("请输入姓名:");
scanf("%s",q->sname);
printf("请输入数学成绩:");
scanf("%f",&q->score[0]);
printf("请输入语文成绩:");
scanf("%f",&q->score[1]);
printf("请输入英语成绩:");
scanf("%f",&q->score[2]);
break;
}
}
if(c==m && n==1)
{
printf("此学号不存在,请重新输入\n");
}else if(c==m && n==2){
printf("此姓名不存在,请重新输入\n");
}else{
if((fp=fopen("data.txt","w"))==NULL)
{
printf("打开文件失败\n");
return;
}
q=head->next;
while(q)
{
totalscore=0;
fprintf(fp,"%s %s %s %s ",q->snum,q->xueyuan,q->classr,q->sname);
for(i=0;i<N;i++)
{
totalscore+=q->score[i];
fprintf(fp,"%f ",q->score[i]);
}
fprintf(fp,"%f ",totalscore);
q=q->next;
}
fclose(fp);
printf("信息修改成功\n");
view(1);
}
printf("是否继续修改学生信息(Y/N):");
scanf("%s",ch);
}
}
/*---------------------查看某一条成绩的信息-----------------------*/
void search()
{
FILE *fp;
linklist *head;
int i,c,m,n;
char number[18],ch[2],name[20],xiyuan[21],banji[15];
system("cls");
head=LEN;
loop: printf("1.按学生学号查找\n");
printf("2.按学生姓名查找\n");
printf("3.按学生系院查找\n");
printf("4.按学生班级查找\n");
printf("请输入你的选项:");
scanf("%d",&n);
if(n!=1 && n!=2 && n!=3 && n!=4)
{
printf("输入的选项不存在,请重新操作\n");
goto loop;
}
printf("是否查找学生信息(Y/N):");
scanf("%s",ch);
while(strcmp(ch,"Y")==0 || strcmp(ch,"y")==0)
{
c=0;
m=0;
if(n==1)
{
printf("请输入学号:");
scanf("%s",number);
}
if(n==2)
{
printf("请输入要查找的学生姓名:");
scanf("%s",name);
}
if(n==3)
{
printf("请输入要查找的系院:");
scanf("%s",xiyuan);
}
if(n==4)
{
printf("请输入要查找的班级:");
scanf("%s",banji);
}
system("cls");
if((fp=fopen("data.txt","r"))==NULL)
{
printf("打开文件失败\n");
return;
}
fscanf(fp,"%s%s%s%s",head->snum,head->xueyuan,head->classr,head->sname);
for(i=0;i<N;i++)
fscanf(fp,"%f",&head->score[i]);
fscanf(fp,"%f",&head->sum);
while(feof(fp)==0)
{
m++;
fscanf(fp,"%s%s%s%s",head->snum,head->xueyuan,head->classr,head->sname);
for(i=0;i<N;i++)
fscanf(fp,"%f",&head->score[i]);
fscanf(fp,"%f",&head->sum);
}
fclose(fp);
if(m==0)
{
printf("目前没有信息\n");
return;
}
if((fp=fopen("data.txt","r"))==NULL)
{
printf("打开文件失败\n");
return;
}
PRINTF;
fscanf(fp,"%s%s%s%s",head->snum,head->xueyuan,head->classr,head->sname);
for(i=0;i<N;i++)
fscanf(fp,"%f",&head->score[i]);
fscanf(fp,"%f",&head->sum);
while(feof(fp)==0)
{
if((strcmp(head->snum,number)==0 && n==1)) // 如果n=1是按学号查找
{
printf("%-14s%-14s%-12s%-13s",head->snum,head->xueyuan,head->classr,head->sname);
for(i=0;i<N;i++)
printf("%-7.1f",head->score[i]);
printf("%-7.1f",head->sum);
printf("\n");
break;
}
if((strcmp(head->sname,name)==0 && n==2) || (strcmp(head->xueyuan,xiyuan)==0 && n==3) || (strcmp(head->classr,banji)==0 && n==4)) // 如果n=2 是按姓名查找 n=3是按系院查找 n=4是按班级
{
printf("%-14s%-14s%-12s%-13s",head->snum,head->xueyuan,head->classr,head->sname);
for(i=0;i<N;i++)
printf("%-7.1f",head->score[i]);
printf("%-7.1f",head->sum);
printf("\n");
}
else{
c++;
}
fscanf(fp,"%s%s%s%s",head->snum,head->xueyuan,head->classr,head->sname);
for(i=0;i<N;i++)
fscanf(fp,"%f",&head->score[i]);
fscanf(fp,"%f",&head->sum);
}
if(c==m && n==1)
printf("此学号不存在\n");
if(c==m && n==2)
printf("此姓名不存在\n");
printf("是否继续查询学生成绩(Y/N):");
scanf("%s",ch);
}
}
/*-----------------备份文件------------------*/
void beifen()
{
FILE *fp,*fp1;
linklist *head;
int i;
char filename[20];
void now_time(char filename[]);
system("cls");
head=LEN;
if((fp=fopen("data.txt","r"))==NULL)
{
printf("打开文件失败\n");
return;
}
getchar();
printf("请输入你要备份文件的文件名:");
gets(filename);
now_time(filename);
if((fp1=fopen(filename,"w"))==NULL)
{
printf("打开文件失败\n");
return;
}
fscanf(fp,"%s%s%s%s",head->snum,head->xueyuan,head->classr,head->sname);
for(i=0;i<N;i++)
fscanf(fp,"%f",&head->score[i]);
fscanf(fp,"%f",&head->sum);
while(feof(fp)==0)
{
fprintf(fp1,"%s %s %s %s ",head->snum,head->xueyuan,head->classr,head->sname);
for(i=0;i<N;i++)
{
fprintf(fp1,"%f ",head->score[i]);
}
fprintf(fp1,"%f ",head->sum);
fscanf(fp,"%s%s%s%s",head->snum,head->xueyuan,head->classr,head->sname);
for(i=0;i<N;i++)
fscanf(fp,"%f",&head->score[i]);
fscanf(fp,"%f",&head->sum);
}
printf("备份成功\n");
fclose(fp);
fclose(fp1);
}
/*------------------获取当前时间,并且存入文件time.txt中------------------*/
void now_time(char filename[])
{
FILE *fp;
time_t rawtime; // 时间类型(time.h 定义)
struct tm *timeinfo; // 时间结构,time.h 定义如下:
if((fp=fopen("time.txt","a+"))==NULL)
{
printf("打开文件失败\n");
return;
}
time(&rawtime); //获取时间,以秒计,从1970年1月一日起算,存于rawtime
timeinfo = localtime(&rawtime); // 转为当地时间,tm 时间结构
printf("%s",filename);
fprintf(fp,"%s ",filename);
fprintf(fp,"%4d %02d %02d %02d %02d %02d\n",
1900+timeinfo->tm_year, // 获取当前的年份
1+timeinfo->tm_mon, // 获取当前的月份
timeinfo->tm_mday, // 获取当前的天数
timeinfo->tm_hour, // 获取当前当前是小时
timeinfo->tm_min, // 获取当前时间的分钟
timeinfo->tm_sec); // 获取当前时间的秒数
fclose(fp);
}
/*-----------------------查看备份信息----------------------------*/
void show_beifen()
{
FILE *fp;
char filename[20],ch[2];
int year,month,day,hour,minutes,se,m=0;
void beifen_view(); // 查看备份文件里面的学生信息
system("cls");
if((fp=fopen("time.txt","r"))==NULL)
{
printf("打开文件失败\n");
return;
}
printf("备份文件记录如下:\n");
printf("备份文件 备份时间\n");
fscanf(fp,"%s",filename);
fscanf(fp,"%4d%02d%02d%02d%02d%02d",&year,&month,&day,&hour,&minutes,&se);
while(feof(fp)==0)
{
m++;
printf("%-20s",filename);
printf("%-4d-%02d-%02d %02d:%02d:%02d",year,month,day,hour,minutes,se);
printf("\n");
fscanf(fp,"%s",filename);
fscanf(fp,"%4d%02d%02d%02d%02d%02d",&year,&month,&day,&hour,&minutes,&se);
}
printf("一共有%d条记录\n",m);
fclose(fp);
printf("是否要查询备份文件的学生成绩记录:");
scanf("%s",ch);
if(strcmp(ch,"Y")==0 || strcmp(ch,"y")==0)
{
beifen_view();
}
}
/*----------------------查看备份文件里面的学生信息----------------------*/
void beifen_view()
{
FILE *fp;
int i,m=0;
char filename[20];
linklist *head;
getchar();
printf("输入你要查看的备份文件:");
gets(filename);
if((fp=fopen(filename,"r"))==NULL)
{
printf("打开文件失败,可能是此文件不存在\n");
return;
}
head=LEN;
fscanf(fp,"%s%s%s%s",head->snum,head->xueyuan,head->classr,head->sname);
for(i=0;i<N;i++)
fscanf(fp,"%f",&head->score[i]);
fscanf(fp,"%f",&head->sum);
while(!feof(fp))
{
fscanf(fp,"%s%s%s%s",head->snum,head->xueyuan,head->classr,head->sname);
for(i=0;i<N;i++)
fscanf(fp,"%f",&head->score[i]);
fscanf(fp,"%f",&head->sum);
m++;
}
fclose(fp);
printf("一共有%d条记录\n",m);
if(m==0)
{
printf("目前尚未添加记录\n");
return;
}
PRINTF;
if((fp=fopen(filename,"r"))==NULL)
{
printf("打开文件失败\n");
return;
}
fscanf(fp,"%s%s%s%s",head->snum,head->xueyuan,head->classr,head->sname);
for(i=0;i<N;i++)
fscanf(fp,"%f",&head->score[i]);
fscanf(fp,"%f",&head->sum);
while(feof(fp)==0)
{
printf("%-18s%-21s%-13s%-15s",head->snum,head->xueyuan,head->classr,head->sname);
for(i=0;i<N;i++)
printf("%-7.1f",head->score[i]);
printf("%-7.1f",head->sum);
fscanf(fp,"%s%s%s%s",head->snum,head->xueyuan,head->classr,head->sname);
for(i=0;i<N;i++)
fscanf(fp,"%f",&head->score[i]);
fscanf(fp,"%f",&head->sum);
printf("\n");
}
fclose(fp);
}
/*--------------------time.txt文件是存储备份时间的文件-------------------------------*/
/*--------------------备份文件的文件名字需要自己输入---------------------------------*/
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#include<time.h> // 必须的时间函数头文件
#define BACKSPACE 8
#define N 3
#define LEN (linklist *)malloc(sizeof(linklist))
#define PRINTF printf("学号 系院 班级 姓名 数学 语文 英语 总分\n")
#define PRINTF1 printf("学号 系院 班级 姓名 数学\n")
#define PRINTF2 printf("学号 系院 班级 姓名 语文\n")
#define PRINTF3 printf("学号 系院 班级 姓名 英语\n")
typedef struct node
{
char snum[18]; // 学号
char xueyuan[21]; // 系院
char classr[15];
char sname[15]; //姓名
float score[N]; // 分数
float sum; //总分
struct node *next;
}linklist;
int main()
{
int n;
void menu(); // 主菜单
void login(); // 登录界面
void zi_menu(); // 前台查询学生成绩下的菜单
menu(); // 主菜单函数
scanf("%d",&n);
switch(n)
{
case 1:
zi_menu(); //显示所以学生信息
break;
case 2:
login(); // 登录界面
break;
default:break;
}
return 0;
}
/*----------------主菜单界面函数----------------------------*/
void menu()
{
system("cls");
printf("\n\n\n\n");
printf("\t\t|---------------------主菜单------------------|\n");
printf("\t\t|---------------按下面数字选择操作------------|\n");
printf("\t\t|\t1. 查看学生成绩 |\n");
printf("\t\t|\t2. 后台登录 |\n");
printf("\t\t|\t0. 退出 |\n");
printf("\t\t|---------------------------------------------|\n");
printf("请输入所选操作:");
}
/*---------------登录后的菜单页面---------------------*/
void login_menu()
{
int n,m;
linklist *creat(); // 创建链表 数据添加
void view(int); // 查找所有数据函数
void delete_student(); // 删除某一条学生信息
void update(); // 修改某一条学生信息
void search(); // 查询某一条学生的信息
void beifen(); // 备份函数
void show_beifen(); // 查看备份信息
void sort_score(); //
system("cls"); // 清屏
printf("\n\n\n\n");
printf("\t\t|---------------------主菜单------------------|\n");
printf("\t\t|---------------按下面数字选择操作------------|\n");
printf("\t\t|\t1. 添加学生成绩 |\n");
printf("\t\t|\t2. 查看学生成绩 |\n");
printf("\t\t|\t3. 删除学生成绩 |\n");
printf("\t\t|\t4. 修改学生成绩 |\n");
printf("\t\t|\t5. 查找某一条学生信息 |\n");
printf("\t\t|\t6. 备份文件 |\n");
printf("\t\t|\t7. 查看备份文件的学生信息 |\n");
printf("\t\t|\t0. 退出 |\n");
printf("\t\t|---------------------------------------------|\n");
printf("请输入所选操作:");
scanf("%d",&n);
switch(n)
{
case 1:
creat(); // 创建链表 数据添加
break;
case 2:
printf("1.查看学生的全部成绩信息\n");
printf("2.查看所有的数学成绩信息\n");
printf("3.查看所有生的语文成绩信息\n");
printf("4.查看所有生的英语成绩信息\n");
printf("0.退出\n");
printf("请输入你的选项:");
scanf("%d",&m);
view(m); // 查找所有数据函数
break;
case 0:
return;
break;
case 3:
delete_student(); // 删除某一条学生信息
break;
case 4:
update(); // 修改某一条学生的信息
break;
case 5:
search(); // 查询某一条学生的信息
break;
case 6:
beifen(); // 备份
break;
case 7:
show_beifen();
break;
default:break;
}
printf("按任意键返回主菜单");
getch();
login_menu();
}
/*-------------------前台子菜单----------------------*/
void zi_menu()
{
int n,m;
void view(int);
void search();
printf("1.查看学生的成绩信息\n");
printf("2.按条件查询学生信息\n");
printf("请输入你要查询的数字:");
scanf("%d",&n);
switch(n)
{
case 1:
printf("1.查看学生的全部成绩信息\n");
printf("2.查看所有的数学成绩信息\n");
printf("3.查看所有生的语文成绩信息\n");
printf("4.查看所有生的英语成绩信息\n");
printf("0.退出\n");
printf("请输入你的选项:");
scanf("%d",&m);
view(m); // 查找所有数据函数
break;
case 2:
search();
break;
default:break;
}
printf("按任意键返回主菜单");
getch();
main();
}
/*----------- 登录验证--------------------------*/
void login()
{
char username[25],password[20],ch;
int i;
do{
i=0;
system("cls");
printf("\n\n\n\n");
printf("\t\t|---------------------主菜单------------------|\n");
printf("\t\t\t 用户名:");
scanf("%s",username);
printf("\t\t\t 密 码:");
/*---------------把输入密码框变成*---------------*/
while((ch=getch())!='\r')
{
if (ch == BACKSPACE)
{
if (i > 0)
{
password[--i] = NULL;
printf("\b ");
printf("%c%c%c", BACKSPACE, ' ', BACKSPACE);
}
else
putchar(7);
}else{
printf("*");
password[i++]=ch;
}
}
/*------------------------------------------*/
password[i]='\0';
printf("\n");
printf("\t\t|---------------------------------------------|\n");
if(strcmp(username,"huangjianxiang")!=0 || strcmp(password,"huangjianxiang")!=0)
{
printf("用户名或者密码错误,按任意键重新输入\n");
getch();
}else{
login_menu();
}
}while(strcmp(username,"huangjianxiang")!=0 || strcmp(password,"huangjianxiang")!=0);
}
/*-------------------创建链表,添加数据---------------------*/
linklist *creat()
{
system("cls");
FILE *fp;
int i;
char ch[2];
void view(int);
linklist *r,*s,*head;
head=LEN;
r=head;
view(1);
printf("是否添加学生成绩信息(Y/N):");
scanf("%s",ch);
while(strcmp(ch,"Y")==0 || strcmp(ch,"y")==0)
{
system("cls");
view(1);
if((fp=fopen("data.txt","a+"))==NULL)
{
printf("打开失败\n");
return 0;
}
s=LEN;
s->sum=0;
printf("请输入学号:");
scanf("%s",s->snum);
fscanf(fp,"%s%s%s%s",head->snum,head->xueyuan,head->classr,head->sname);
for(i=0;i<N;i++)
fscanf(fp,"%f",&head->score[i]);
fscanf(fp,"%f",&head->sum);
while(feof(fp)==0)
{
if(strcmp(head->snum,s->snum)==0)
{
printf("该学号已经存在\n");
fclose(fp);
return 0;
}
fscanf(fp,"%s%s%s%s",head->snum,head->sname,head->classr,head->xueyuan);
for(i=0;i<N;i++)
fscanf(fp,"%f",&head->score[i]);
fscanf(fp,"%f",&head->sum);
}
printf("请输入学院:");
scanf("%s",s->xueyuan);
printf("请输入班级:");
scanf("%s",s->classr);
printf("请输入姓名:");
scanf("%s",s->sname);
fprintf(fp,"%s %s %s %s ",s->snum,s->xueyuan,s->classr,s->sname);
printf("请输入数学成绩:");
scanf("%f",&s->score[0]);
printf("请输入语文成绩:");
scanf("%f",&s->score[1]);
printf("请输入英语成绩:");
scanf("%f",&s->score[2]);
for(i=0;i<N;i++)
{
s->sum+=(s->score[i]);
fprintf(fp,"%f ",s->score[i]);
}
fprintf(fp,"%f ",s->sum);
printf("保存成功\n");
fclose(fp);
printf("是否继续添加(Y/N):");
r->next=s;
r=s;
scanf("%s",ch);
}
r->next=NULL;
return head;
}
/*---------------------显示所有成绩信息----------------------*/
void view(int n)
{
FILE *fp;
int i,m=0,j=0,jige=0,youxiu=0,z,y;
linklist *head,*r,*p,*q;
float sum=0;
if(n==0)
return;
system("cls");
if((fp=fopen("data.txt","r"))==NULL)
{
printf("打开文件失败,可能是此文件不存在\n");
return;
}
head=LEN;
r=head;
p=LEN;
fscanf(fp,"%s%s%s%s",p->snum,p->xueyuan,p->classr,p->sname);
for(i=0;i<N;i++)
fscanf(fp,"%f",&p->score[i]);
fscanf(fp,"%f",&p->sum);
while(!feof(fp))
{
r->next=p;
r=p;
p=LEN;
fscanf(fp,"%s%s%s%s",p->snum,p->xueyuan,p->classr,p->sname);
for(i=0;i<N;i++)
fscanf(fp,"%f",&p->score[i]);
fscanf(fp,"%f",&p->sum);
m++;
}
r->next=NULL;
fclose(fp);
printf("一共有%d条记录\n",m);
if(m==0)
{
printf("目前尚未添加记录\n");
return;
}
if(n==1) PRINTF;
if(n==2) PRINTF1;
if(n==3) PRINTF2;
if(n==4) PRINTF3;
for(z=1;z<=m-1;z++)
{
r=head;
q=r->next;
p=q->next;
for(y=1;y<=m-z;y++)
{
if(n==1)
{
if(q->sum < p->sum)
{
r->next=p;
q->next=p->next;
p->next=q;
r=p;
p=q->next;
}
else
{
r=q;
q=p;
p=p->next;
}
}
if(n==2)
{
if(q->score[0] < p->score[0])
{
r->next=p;
q->next=p->next;
p->next=q;
r=p;
p=q->next;
}
else
{
r=q;
q=p;
p=p->next;
}
}
if(n==3)
{
if(q->score[1] < p->score[1])
{
r->next=p;
q->next=p->next;
p->next=q;
r=p;
p=q->next;
}
else
{
r=q;
q=p;
p=p->next;
}
}
if(n==4)
{
if(q->score[2] < p->score[2])
{
r->next=p;
q->next=p->next;
p->next=q;
r=p;
p=q->next;
}
else
{
r=q;
q=p;
p=p->next;
}
}
}
}
p=head->next;
while(p)
{
if(n==1)
{
printf("%-14s%-14s%-12s%-13s",p->snum,p->xueyuan,p->classr,p->sname);
for(i=0;i<N;i++)
printf("%-7.1f",p->score[i]);
printf("%-7.1f",p->sum);
}
if(n==2)
{
printf("%-14s%-14s%-12s%-13s",p->snum,p->xueyuan,p->classr,p->sname);
printf("%-7.1f",p->score[0]);
sum+=p->score[0];
j++;
if(p->score[0]>=80)
youxiu++;
if(p->score[0]>=60)
jige++;
}
if(n==3)
{
printf("%-14s%-14s%-12s%-13s",p->snum,p->xueyuan,p->classr,p->sname);
printf("%-7.1f",p->score[1]);
sum+=p->score[1];
j++;
if(p->score[1]>=80)
youxiu++;
if(p->score[1]>=60)
jige++;
}
if(n==4)
{
printf("%-14s%-14s%-12s%-13s",p->snum,p->xueyuan,p->classr,p->sname);
printf("%-7.1f",p->score[2]);
sum+=p->score[2];
j++;
if(p->score[2]>=80)
youxiu++;
if(p->score[2]>=60)
jige++;
}
printf("\n");
p=p->next;
}
if(n==2 || n==3 || n==4)
{
printf("平均分是%-7.2f\n",sum/j);
printf("优秀:%d\n",youxiu);
printf("及格:%d\n",jige);
printf("优秀率:%-4.2f%%\n",(youxiu/float(j))*100);
printf("及格率:%-4.2f%%\n",(jige/float(j))*100);
}
fclose(fp);
}
/*--------------------删x除某一条记录,按学号或者姓名删除--------------------*/
void delete_student()
{
FILE *fp;
int i,n,m,c;
char number[20],ch[2],name[20];
linklist *head,*p,*r,*q;
system("cls");
loop: printf("1.按学生学号删除\n");
printf("2.按学生姓名删除\n");
printf("请输入你的选项:");
scanf("%d",&n);
if(n!=1 && n!=2)
{
printf("输入的选项不存在,请重新操作\n");
goto loop;
}
view(1);
head=LEN;
printf("是否删除学生信息(Y/N):");
scanf("%s",ch);
while(strcmp(ch,"Y")==0 || strcmp(ch,"y")==0)
{
m=0;
c=0;
if((fp=fopen("data.txt","r"))==NULL)
{
printf("打开文件失败\n");
return;
}
r=head;
p=LEN;
fscanf(fp,"%s%s%s%s",p->snum,p->xueyuan,p->classr,p->sname);
for(i=0;i<N;i++)
fscanf(fp,"%f",&p->score[i]);
fscanf(fp,"%f",&p->sum);
while(feof(fp)==0)
{
m++;
r->next=p;
r=p;
p=LEN;
fscanf(fp,"%s%s%s%s",p->snum,p->xueyuan,p->classr,p->sname);
for(i=0;i<N;i++)
fscanf(fp,"%f",&p->score[i]);
fscanf(fp,"%f",&p->sum);
}
r->next=NULL;
fclose(fp);
p=head;
q=head->next;
if(n==1)
{
printf("请输入要删除的学号:");
scanf("%s",number);
}
if(n==2)
{
printf("请输入要删除的学生姓名:");
scanf("%s",name);
}
while(q)
{
if((strcmp(q->snum,number)!=0 && n==1) || (strcmp(q->sname,name)!=0 && n==2)) // 如果n=1是按学号删除 如果n=2 是按姓名删除
{
q=q->next;
p=p->next;
c++;
}
else{
p->next=q->next;
free(q);
break;
}
}
if(c==m && n==1)
{
printf("此学号不存在,请重新输入\n");
}else if(c==m && n==2){
printf("此姓名不存在,请重新输入\n");
}else{
if((fp=fopen("data.txt","w"))==NULL)
{
printf("打开文件失败!");
return;
}
q=head->next;
while(q)
{
fprintf(fp,"%s %s %s %s ",q->snum,q->xueyuan,q->classr,q->sname);
for(i=0;i<N;i++)
fprintf(fp,"%f ",q->score[i]);
fprintf(fp,"%f ",q->sum);
q=q->next;
}
fclose(fp);
printf("信息删除成功\n");
view(1);
}
printf("是否继续删除学生信息(Y/N):");
scanf("%s",ch);
}
}
/*-----------------------------修改学生信息-------------------------------*/
void update()
{
FILE *fp;
int i,n,c,m;
float totalscore;
char ch[2],number[20],name[20];
linklist *head,*p,*r,*q;
system("cls");
loop: printf("1.按学生学号修改\n");
printf("2.按学生姓名修改\n");
printf("请输入你的选项:");
scanf("%d",&n);
if(n!=1 && n!=2)
{
printf("输入的选项不存在,请重新操作\n");
goto loop;
}
view(1);
head=LEN;
printf("是否修改学生信息(Y/N):");
scanf("%s",ch);
while(strcmp(ch,"Y")==0 || strcmp(ch,"y")==0)
{
c=0;
m=0;
if((fp=fopen("data.txt","r"))==NULL)
{
printf("打开文件失败\n");
return;
}
r=head;
p=LEN;
fscanf(fp,"%s%s%s%s",p->snum,p->xueyuan,p->classr,p->sname);
for(i=0;i<N;i++)
fscanf(fp,"%f",&p->score[i]);
fscanf(fp,"%f",&p->sum);
while(feof(fp)==0)
{
m++;
r->next=p;
r=p;
p=LEN;
fscanf(fp,"%s%s%s%s",p->snum,p->xueyuan,p->classr,p->sname);
for(i=0;i<N;i++)
fscanf(fp,"%f",&p->score[i]);
fscanf(fp,"%f",&p->sum);
}
r->next=NULL;
fclose(fp);
q=head->next;
if(n==1)
{
printf("请输入要修改的学号:");
scanf("%s",number);
}
if(n==2)
{
printf("请输入要修改的学生姓名:");
scanf("%s",name);
}
while(q)
{
if((strcmp(q->snum,number)!=0 && n==1) || (strcmp(q->sname,name)!=0 && n==2)) // 如果n=1是按学号修改 如果n=2 是按姓名修改
{
q=q->next;
c++;
}else{
printf("请输入新的学号:");
scanf("%s",q->snum);
printf("请输入学院:");
scanf("%s",q->xueyuan);
printf("请输入班级:");
scanf("%s",q->classr);
printf("请输入姓名:");
scanf("%s",q->sname);
printf("请输入数学成绩:");
scanf("%f",&q->score[0]);
printf("请输入语文成绩:");
scanf("%f",&q->score[1]);
printf("请输入英语成绩:");
scanf("%f",&q->score[2]);
break;
}
}
if(c==m && n==1)
{
printf("此学号不存在,请重新输入\n");
}else if(c==m && n==2){
printf("此姓名不存在,请重新输入\n");
}else{
if((fp=fopen("data.txt","w"))==NULL)
{
printf("打开文件失败\n");
return;
}
q=head->next;
while(q)
{
totalscore=0;
fprintf(fp,"%s %s %s %s ",q->snum,q->xueyuan,q->classr,q->sname);
for(i=0;i<N;i++)
{
totalscore+=q->score[i];
fprintf(fp,"%f ",q->score[i]);
}
fprintf(fp,"%f ",totalscore);
q=q->next;
}
fclose(fp);
printf("信息修改成功\n");
view(1);
}
printf("是否继续修改学生信息(Y/N):");
scanf("%s",ch);
}
}
/*---------------------查看某一条成绩的信息-----------------------*/
void search()
{
FILE *fp;
linklist *head;
int i,c,m,n;
char number[18],ch[2],name[20],xiyuan[21],banji[15];
system("cls");
head=LEN;
loop: printf("1.按学生学号查找\n");
printf("2.按学生姓名查找\n");
printf("3.按学生系院查找\n");
printf("4.按学生班级查找\n");
printf("请输入你的选项:");
scanf("%d",&n);
if(n!=1 && n!=2 && n!=3 && n!=4)
{
printf("输入的选项不存在,请重新操作\n");
goto loop;
}
printf("是否查找学生信息(Y/N):");
scanf("%s",ch);
while(strcmp(ch,"Y")==0 || strcmp(ch,"y")==0)
{
c=0;
m=0;
if(n==1)
{
printf("请输入学号:");
scanf("%s",number);
}
if(n==2)
{
printf("请输入要查找的学生姓名:");
scanf("%s",name);
}
if(n==3)
{
printf("请输入要查找的系院:");
scanf("%s",xiyuan);
}
if(n==4)
{
printf("请输入要查找的班级:");
scanf("%s",banji);
}
system("cls");
if((fp=fopen("data.txt","r"))==NULL)
{
printf("打开文件失败\n");
return;
}
fscanf(fp,"%s%s%s%s",head->snum,head->xueyuan,head->classr,head->sname);
for(i=0;i<N;i++)
fscanf(fp,"%f",&head->score[i]);
fscanf(fp,"%f",&head->sum);
while(feof(fp)==0)
{
m++;
fscanf(fp,"%s%s%s%s",head->snum,head->xueyuan,head->classr,head->sname);
for(i=0;i<N;i++)
fscanf(fp,"%f",&head->score[i]);
fscanf(fp,"%f",&head->sum);
}
fclose(fp);
if(m==0)
{
printf("目前没有信息\n");
return;
}
if((fp=fopen("data.txt","r"))==NULL)
{
printf("打开文件失败\n");
return;
}
PRINTF;
fscanf(fp,"%s%s%s%s",head->snum,head->xueyuan,head->classr,head->sname);
for(i=0;i<N;i++)
fscanf(fp,"%f",&head->score[i]);
fscanf(fp,"%f",&head->sum);
while(feof(fp)==0)
{
if((strcmp(head->snum,number)==0 && n==1)) // 如果n=1是按学号查找
{
printf("%-14s%-14s%-12s%-13s",head->snum,head->xueyuan,head->classr,head->sname);
for(i=0;i<N;i++)
printf("%-7.1f",head->score[i]);
printf("%-7.1f",head->sum);
printf("\n");
break;
}
if((strcmp(head->sname,name)==0 && n==2) || (strcmp(head->xueyuan,xiyuan)==0 && n==3) || (strcmp(head->classr,banji)==0 && n==4)) // 如果n=2 是按姓名查找 n=3是按系院查找 n=4是按班级
{
printf("%-14s%-14s%-12s%-13s",head->snum,head->xueyuan,head->classr,head->sname);
for(i=0;i<N;i++)
printf("%-7.1f",head->score[i]);
printf("%-7.1f",head->sum);
printf("\n");
}
else{
c++;
}
fscanf(fp,"%s%s%s%s",head->snum,head->xueyuan,head->classr,head->sname);
for(i=0;i<N;i++)
fscanf(fp,"%f",&head->score[i]);
fscanf(fp,"%f",&head->sum);
}
if(c==m && n==1)
printf("此学号不存在\n");
if(c==m && n==2)
printf("此姓名不存在\n");
printf("是否继续查询学生成绩(Y/N):");
scanf("%s",ch);
}
}
/*-----------------备份文件------------------*/
void beifen()
{
FILE *fp,*fp1;
linklist *head;
int i;
char filename[20];
void now_time(char filename[]);
system("cls");
head=LEN;
if((fp=fopen("data.txt","r"))==NULL)
{
printf("打开文件失败\n");
return;
}
getchar();
printf("请输入你要备份文件的文件名:");
gets(filename);
now_time(filename);
if((fp1=fopen(filename,"w"))==NULL)
{
printf("打开文件失败\n");
return;
}
fscanf(fp,"%s%s%s%s",head->snum,head->xueyuan,head->classr,head->sname);
for(i=0;i<N;i++)
fscanf(fp,"%f",&head->score[i]);
fscanf(fp,"%f",&head->sum);
while(feof(fp)==0)
{
fprintf(fp1,"%s %s %s %s ",head->snum,head->xueyuan,head->classr,head->sname);
for(i=0;i<N;i++)
{
fprintf(fp1,"%f ",head->score[i]);
}
fprintf(fp1,"%f ",head->sum);
fscanf(fp,"%s%s%s%s",head->snum,head->xueyuan,head->classr,head->sname);
for(i=0;i<N;i++)
fscanf(fp,"%f",&head->score[i]);
fscanf(fp,"%f",&head->sum);
}
printf("备份成功\n");
fclose(fp);
fclose(fp1);
}
/*------------------获取当前时间,并且存入文件time.txt中------------------*/
void now_time(char filename[])
{
FILE *fp;
time_t rawtime; // 时间类型(time.h 定义)
struct tm *timeinfo; // 时间结构,time.h 定义如下:
if((fp=fopen("time.txt","a+"))==NULL)
{
printf("打开文件失败\n");
return;
}
time(&rawtime); //获取时间,以秒计,从1970年1月一日起算,存于rawtime
timeinfo = localtime(&rawtime); // 转为当地时间,tm 时间结构
printf("%s",filename);
fprintf(fp,"%s ",filename);
fprintf(fp,"%4d %02d %02d %02d %02d %02d\n",
1900+timeinfo->tm_year, // 获取当前的年份
1+timeinfo->tm_mon, // 获取当前的月份
timeinfo->tm_mday, // 获取当前的天数
timeinfo->tm_hour, // 获取当前当前是小时
timeinfo->tm_min, // 获取当前时间的分钟
timeinfo->tm_sec); // 获取当前时间的秒数
fclose(fp);
}
/*-----------------------查看备份信息----------------------------*/
void show_beifen()
{
FILE *fp;
char filename[20],ch[2];
int year,month,day,hour,minutes,se,m=0;
void beifen_view(); // 查看备份文件里面的学生信息
system("cls");
if((fp=fopen("time.txt","r"))==NULL)
{
printf("打开文件失败\n");
return;
}
printf("备份文件记录如下:\n");
printf("备份文件 备份时间\n");
fscanf(fp,"%s",filename);
fscanf(fp,"%4d%02d%02d%02d%02d%02d",&year,&month,&day,&hour,&minutes,&se);
while(feof(fp)==0)
{
m++;
printf("%-20s",filename);
printf("%-4d-%02d-%02d %02d:%02d:%02d",year,month,day,hour,minutes,se);
printf("\n");
fscanf(fp,"%s",filename);
fscanf(fp,"%4d%02d%02d%02d%02d%02d",&year,&month,&day,&hour,&minutes,&se);
}
printf("一共有%d条记录\n",m);
fclose(fp);
printf("是否要查询备份文件的学生成绩记录:");
scanf("%s",ch);
if(strcmp(ch,"Y")==0 || strcmp(ch,"y")==0)
{
beifen_view();
}
}
/*----------------------查看备份文件里面的学生信息----------------------*/
void beifen_view()
{
FILE *fp;
int i,m=0;
char filename[20];
linklist *head;
getchar();
printf("输入你要查看的备份文件:");
gets(filename);
if((fp=fopen(filename,"r"))==NULL)
{
printf("打开文件失败,可能是此文件不存在\n");
return;
}
head=LEN;
fscanf(fp,"%s%s%s%s",head->snum,head->xueyuan,head->classr,head->sname);
for(i=0;i<N;i++)
fscanf(fp,"%f",&head->score[i]);
fscanf(fp,"%f",&head->sum);
while(!feof(fp))
{
fscanf(fp,"%s%s%s%s",head->snum,head->xueyuan,head->classr,head->sname);
for(i=0;i<N;i++)
fscanf(fp,"%f",&head->score[i]);
fscanf(fp,"%f",&head->sum);
m++;
}
fclose(fp);
printf("一共有%d条记录\n",m);
if(m==0)
{
printf("目前尚未添加记录\n");
return;
}
PRINTF;
if((fp=fopen(filename,"r"))==NULL)
{
printf("打开文件失败\n");
return;
}
fscanf(fp,"%s%s%s%s",head->snum,head->xueyuan,head->classr,head->sname);
for(i=0;i<N;i++)
fscanf(fp,"%f",&head->score[i]);
fscanf(fp,"%f",&head->sum);
while(feof(fp)==0)
{
printf("%-18s%-21s%-13s%-15s",head->snum,head->xueyuan,head->classr,head->sname);
for(i=0;i<N;i++)
printf("%-7.1f",head->score[i]);
printf("%-7.1f",head->sum);
fscanf(fp,"%s%s%s%s",head->snum,head->xueyuan,head->classr,head->sname);
for(i=0;i<N;i++)
fscanf(fp,"%f",&head->score[i]);
fscanf(fp,"%f",&head->sum);
printf("\n");
}
fclose(fp);
}
转载请注明本文地址: c语言制作的学生成绩管理系统 加链表