主题:求高手,成绩管理系统的,输入数据返回主菜单后数据就没了,帮忙修改一下错误(1)
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#include"conio.h"
#define HEADER1 " -----------------------------------------------------\n"
#define HEADER2 " |学号|姓名|性别|年龄|语文|数学|英语|电脑|总分|平均分|\n"
#define HEADER3 " |----|----|----|----|----|----|----|----|----|------|\n"
#define FORMAT " |%-5s|%-5s|%-5s|%-5s|%-5d|%-5d|%-5d|%-5d|%-5d|%-5d|\n"
#define DATA p->num,p->name,p->sex,p->age,p->Chinese,p->Math,p->English,p->Computer,p->total,p->average
#define END " -----------------------------------------------------\n"
#define N 100
int saveflag=0;
typedef struct score
{
char num[15];
char sex[15];
char name[15];
char age[15]; //年龄
int Chinese; //语文成绩
int Math; //数学成绩
int English; //英语成绩
int Computer; //电脑成绩
int total; //总分
int average; //平均分
}SCORE;
void menu()
{
system("cls");
printf(" 学生成绩管理系统 \n");
printf(" \n");
printf("*******************主菜单*************************\n");
printf("* 1 输入信息 2 显示信息 *\n");
printf("* 3 删除信息 4 查询信息 *\n");
printf("* 5 修改信息 6 插入信息 *\n");
printf("* 7 排序信息 8 保存信息 *\n");
printf("* 9 统计信息 0 退出系统 *\n");
printf("**************************************************\n");
}
void printheader()
{
printf(HEADER1);
printf(HEADER2);
printf(HEADER3);
}
void printdata(SCORE pp)
{ SCORE *p;
p=&pp;
printf(FORMAT,DATA);
}
main()
{ void Save(SCORE temp[],int n);
void Disp(SCORE temp[],int n);
void SelectSort(SCORE temp[],int n);
void Qur(SCORE temp[],int n);
void Wrong();
void Nofind();
int Locate(SCORE temp[],int n,char findmess[],char nameorphonenum[]);
void stringinput(char *t,int lens,char *notice);
void stringinput1(int *t,char *notice);
int Del(SCORE temp[],int n);
//void SelectSort(SCORE temp[],int n);
void Modify(SCORE temp[],int n);
int Add(SCORE temp[], int n);
int Insert(SCORE temp[],int n);
void Statistics(SCORE temp[],int n);
SCORE tele[N];
FILE *fp;
int select;
char ch;
int count=0;
fp=fopen("C:\\score.txt","a+");
if(fp==NULL)
{ printf("\n====>can not open file!\n");
exit(0);
}
while(!feof(fp))
if(fread(&tele[count],sizeof(SCORE),1,fp)==1)
count++;
fclose(fp);
printf("\n==>成功打开文件,总共有 %d 条记录.\n",count);
getchar();
menu();
while(1)
{ system("cls");
menu();
printf("\n 请输入你的选择(0~9):");
scanf("%d",&select);
if(select==0)
{ if(saveflag==1)
{ getchar();
printf("\n==>是否要保持已经修改的纪录到文件?(y/n):");
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
Save(tele,count);
}
printf("\n===>谢谢你使用本系统!");
getchar();
break;
}
switch(select)
{ case 1:count=Add(tele,count);break;
case 2:system("cls");
Disp(tele,count);getch();break;
case 3:count=Del(tele,count);break;
case 4:Qur(tele,count);getch();break;
case 5:Modify(tele,count);break;
case 6:count=Insert(tele,count);break;
// case 7:SelectSort(tele,count);break;
case 8:Save(tele,count);break;
case 9:Statistics(tele,count);break;
default:Wrong();getchar();break;
}
}
}
void Disp(SCORE temp[],int n)
{ int i;
if(n==0)
printf("\n====>系统中尚无记录!\n");
else
{ printf("\n\n");
printheader();
i=0;
while(i<n)
{ printdata(temp[i]);
i++;
printf(HEADER3);
}
}
}
void Wrong()
{ printf("\n\n\n\n\n*********** Error:输入有错!敲任意键继续**********\n");
getch();
}
void Nofind()
{
printf("\n====>未找到该信息\n");
}
int Locate(SCORE temp[],int n,char findmess[],char nameornum[])
{ int i=0;
if(strcmp(nameornum,"num)")==0)
{ while(i<n)
{ if(strcmp(temp[i].num,findmess)==0) return i;
i++;
}
}
else if(strcmp(nameornum,"name")==0)
{ while(i<n)
{ if(strcmp(temp[i].name,findmess)==0) return i;
i++;
}
}
return -1;
}
void stringinput(char *t,int lens,char *notice)
{ char str[255];
do
{ printf(notice);
scanf("%s",str);
if(strlen(str)>lens)
printf("\n 超过规定的长度!\n");
}while(strlen(str)>lens);
strcpy(t,str);
}
void stringinput1(int *t,char *notice)
{
printf(notice);
scanf("%d",t);
}
int Add(SCORE temp[], int n)
{ char ch,num[10];
int i,flag=0;
system("cls");
Disp(temp,n);
while (1)
{ while (1)
{ stringinput(num,10,"输入编号(按'0'返回主菜单):");
flag=0;
if (strcmp(num,"0")==0) return 0;
i=0;
while (i<n)
{ if (strcmp(temp[i].num,num)==0)
{flag=1;break;}
i++;
}
if (flag==1)
{ getchar();
printf("==>编号 %s 已经存在,再试一次?(y/n):",num);
scanf ("%c",&ch);
if (ch=='y'||ch=='Y') continue;
else return n;
}
else break;
}
strcpy(temp[n].num,num);
stringinput(temp[n].name,15,"Name:");
stringinput(temp[n].sex,15,"Sex:");
stringinput(temp[n].age,15,"Age:");
stringinput1(&temp[n].Chinese,"Chinese:");
stringinput1(&temp[n].Math,"Math:");
stringinput1(&temp[n].English,"English:");
stringinput1(&temp[n].Computer,"Computer:");
saveflag=1;
n++;
}
return(n);
}
void Qur(SCORE temp[],int n)
{ int select;
char searchinput[20];
int p=0;
if(n<=0)
{ system("cls");
printf("\n=====>成绩单中无记录!\n");
getchar();
}
system("cls");
printf("\n =====>1按姓名查找\n");
printf("\n =====>2按学号查找\n");
printf(" 请输入选项编号[1,2]:");
scanf("%d",&select);
if(select==1)
{ stringinput(searchinput,10,"请输入一个已经存在的姓名:");
p=Locate(temp,n,searchinput,"name");
if(p!=1)
{ printheader();
printdata(temp[p]);
printf(END);
printf("敲任意键返回......");
getch();
}
else
Nofind();
getchar();
}
else if(select==2)
{ stringinput(searchinput,10,"请输入一个已经存在的学号:");
p=Locate(temp,n,searchinput,"num");
if(p!=1)
{ printheader();
printdata(temp[p]);
printf(END);
printf("敲任意键返回......");
getchar();
}
else
Nofind();
getchar();
}
else
Wrong();
getchar();
}
int Del(SCORE temp[],int n)
{
int sel;
char findmess[20];
int p=0,i=0;
if(n<=0)
{
system("cls");
printf("\n=====>电话簿无记录!\n");
getchar();
return n;
}
system("cls");
Disp(temp,n);
printf("\n\t=====>1根据姓名进行删除\n");
printf("\n\t=====>2根据学号进行删除\n");
printf("\t请选择[1,2]:");
scanf("%d",&sel);
if(sel==1)
{
stringinput(findmess,10,"输入一个已有的姓名:");
p=Locate(temp,n,findmess,"name");
getchar();
if(p!=-1)
{
for(i=p+1;i<n;i++)
{
strcpy(temp[i-1].num,temp[i].num);
strcpy(temp[i-1].name,temp[i].name);
strcpy(temp[i-1].sex,temp[i].sex);
temp[i-1].Chinese=temp[i].Chinese;
temp[i-1].Math=temp[i].Math;
temp[i-1].English=temp[i].English;
temp[i-1].Computer=temp[i].Computer;
temp[i-1].total=temp[i].total;
temp[i-1].average=temp[i].average;
}
printf("\n\t====>删除成功!\n");
n--;
getchar();
saveflag=1;
}
else
Nofind();
getchar();
}
else if(sel==2)
{
stringinput(findmess,15,"请输入一个已经存在的学号:");
p=Locate(temp,n,findmess,"num");
getchar();
if(p!=-1)
{
for(i=p+1;i<n;i++)
{
strcpy(temp[i-1].num,temp[i].num);
strcpy(temp[i-1].name,temp[i].name);
strcpy(temp[i-1].sex,temp[i].sex);
temp[i-1].Chinese=temp[i].Chinese;
temp[i-1].Math=temp[i].Math;
temp[i-1].English=temp[i].English;
temp[i-1].Computer=temp[i].Computer;
temp[i-1].total=temp[i].total;
temp[i-1].average=temp[i].average;
}
printf("\n\t====>删除成功!\n");
n--;
getchar();
saveflag=1;
}
else
Nofind();
getchar();
}
return n;
}
#include"stdlib.h"
#include"string.h"
#include"conio.h"
#define HEADER1 " -----------------------------------------------------\n"
#define HEADER2 " |学号|姓名|性别|年龄|语文|数学|英语|电脑|总分|平均分|\n"
#define HEADER3 " |----|----|----|----|----|----|----|----|----|------|\n"
#define FORMAT " |%-5s|%-5s|%-5s|%-5s|%-5d|%-5d|%-5d|%-5d|%-5d|%-5d|\n"
#define DATA p->num,p->name,p->sex,p->age,p->Chinese,p->Math,p->English,p->Computer,p->total,p->average
#define END " -----------------------------------------------------\n"
#define N 100
int saveflag=0;
typedef struct score
{
char num[15];
char sex[15];
char name[15];
char age[15]; //年龄
int Chinese; //语文成绩
int Math; //数学成绩
int English; //英语成绩
int Computer; //电脑成绩
int total; //总分
int average; //平均分
}SCORE;
void menu()
{
system("cls");
printf(" 学生成绩管理系统 \n");
printf(" \n");
printf("*******************主菜单*************************\n");
printf("* 1 输入信息 2 显示信息 *\n");
printf("* 3 删除信息 4 查询信息 *\n");
printf("* 5 修改信息 6 插入信息 *\n");
printf("* 7 排序信息 8 保存信息 *\n");
printf("* 9 统计信息 0 退出系统 *\n");
printf("**************************************************\n");
}
void printheader()
{
printf(HEADER1);
printf(HEADER2);
printf(HEADER3);
}
void printdata(SCORE pp)
{ SCORE *p;
p=&pp;
printf(FORMAT,DATA);
}
main()
{ void Save(SCORE temp[],int n);
void Disp(SCORE temp[],int n);
void SelectSort(SCORE temp[],int n);
void Qur(SCORE temp[],int n);
void Wrong();
void Nofind();
int Locate(SCORE temp[],int n,char findmess[],char nameorphonenum[]);
void stringinput(char *t,int lens,char *notice);
void stringinput1(int *t,char *notice);
int Del(SCORE temp[],int n);
//void SelectSort(SCORE temp[],int n);
void Modify(SCORE temp[],int n);
int Add(SCORE temp[], int n);
int Insert(SCORE temp[],int n);
void Statistics(SCORE temp[],int n);
SCORE tele[N];
FILE *fp;
int select;
char ch;
int count=0;
fp=fopen("C:\\score.txt","a+");
if(fp==NULL)
{ printf("\n====>can not open file!\n");
exit(0);
}
while(!feof(fp))
if(fread(&tele[count],sizeof(SCORE),1,fp)==1)
count++;
fclose(fp);
printf("\n==>成功打开文件,总共有 %d 条记录.\n",count);
getchar();
menu();
while(1)
{ system("cls");
menu();
printf("\n 请输入你的选择(0~9):");
scanf("%d",&select);
if(select==0)
{ if(saveflag==1)
{ getchar();
printf("\n==>是否要保持已经修改的纪录到文件?(y/n):");
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
Save(tele,count);
}
printf("\n===>谢谢你使用本系统!");
getchar();
break;
}
switch(select)
{ case 1:count=Add(tele,count);break;
case 2:system("cls");
Disp(tele,count);getch();break;
case 3:count=Del(tele,count);break;
case 4:Qur(tele,count);getch();break;
case 5:Modify(tele,count);break;
case 6:count=Insert(tele,count);break;
// case 7:SelectSort(tele,count);break;
case 8:Save(tele,count);break;
case 9:Statistics(tele,count);break;
default:Wrong();getchar();break;
}
}
}
void Disp(SCORE temp[],int n)
{ int i;
if(n==0)
printf("\n====>系统中尚无记录!\n");
else
{ printf("\n\n");
printheader();
i=0;
while(i<n)
{ printdata(temp[i]);
i++;
printf(HEADER3);
}
}
}
void Wrong()
{ printf("\n\n\n\n\n*********** Error:输入有错!敲任意键继续**********\n");
getch();
}
void Nofind()
{
printf("\n====>未找到该信息\n");
}
int Locate(SCORE temp[],int n,char findmess[],char nameornum[])
{ int i=0;
if(strcmp(nameornum,"num)")==0)
{ while(i<n)
{ if(strcmp(temp[i].num,findmess)==0) return i;
i++;
}
}
else if(strcmp(nameornum,"name")==0)
{ while(i<n)
{ if(strcmp(temp[i].name,findmess)==0) return i;
i++;
}
}
return -1;
}
void stringinput(char *t,int lens,char *notice)
{ char str[255];
do
{ printf(notice);
scanf("%s",str);
if(strlen(str)>lens)
printf("\n 超过规定的长度!\n");
}while(strlen(str)>lens);
strcpy(t,str);
}
void stringinput1(int *t,char *notice)
{
printf(notice);
scanf("%d",t);
}
int Add(SCORE temp[], int n)
{ char ch,num[10];
int i,flag=0;
system("cls");
Disp(temp,n);
while (1)
{ while (1)
{ stringinput(num,10,"输入编号(按'0'返回主菜单):");
flag=0;
if (strcmp(num,"0")==0) return 0;
i=0;
while (i<n)
{ if (strcmp(temp[i].num,num)==0)
{flag=1;break;}
i++;
}
if (flag==1)
{ getchar();
printf("==>编号 %s 已经存在,再试一次?(y/n):",num);
scanf ("%c",&ch);
if (ch=='y'||ch=='Y') continue;
else return n;
}
else break;
}
strcpy(temp[n].num,num);
stringinput(temp[n].name,15,"Name:");
stringinput(temp[n].sex,15,"Sex:");
stringinput(temp[n].age,15,"Age:");
stringinput1(&temp[n].Chinese,"Chinese:");
stringinput1(&temp[n].Math,"Math:");
stringinput1(&temp[n].English,"English:");
stringinput1(&temp[n].Computer,"Computer:");
saveflag=1;
n++;
}
return(n);
}
void Qur(SCORE temp[],int n)
{ int select;
char searchinput[20];
int p=0;
if(n<=0)
{ system("cls");
printf("\n=====>成绩单中无记录!\n");
getchar();
}
system("cls");
printf("\n =====>1按姓名查找\n");
printf("\n =====>2按学号查找\n");
printf(" 请输入选项编号[1,2]:");
scanf("%d",&select);
if(select==1)
{ stringinput(searchinput,10,"请输入一个已经存在的姓名:");
p=Locate(temp,n,searchinput,"name");
if(p!=1)
{ printheader();
printdata(temp[p]);
printf(END);
printf("敲任意键返回......");
getch();
}
else
Nofind();
getchar();
}
else if(select==2)
{ stringinput(searchinput,10,"请输入一个已经存在的学号:");
p=Locate(temp,n,searchinput,"num");
if(p!=1)
{ printheader();
printdata(temp[p]);
printf(END);
printf("敲任意键返回......");
getchar();
}
else
Nofind();
getchar();
}
else
Wrong();
getchar();
}
int Del(SCORE temp[],int n)
{
int sel;
char findmess[20];
int p=0,i=0;
if(n<=0)
{
system("cls");
printf("\n=====>电话簿无记录!\n");
getchar();
return n;
}
system("cls");
Disp(temp,n);
printf("\n\t=====>1根据姓名进行删除\n");
printf("\n\t=====>2根据学号进行删除\n");
printf("\t请选择[1,2]:");
scanf("%d",&sel);
if(sel==1)
{
stringinput(findmess,10,"输入一个已有的姓名:");
p=Locate(temp,n,findmess,"name");
getchar();
if(p!=-1)
{
for(i=p+1;i<n;i++)
{
strcpy(temp[i-1].num,temp[i].num);
strcpy(temp[i-1].name,temp[i].name);
strcpy(temp[i-1].sex,temp[i].sex);
temp[i-1].Chinese=temp[i].Chinese;
temp[i-1].Math=temp[i].Math;
temp[i-1].English=temp[i].English;
temp[i-1].Computer=temp[i].Computer;
temp[i-1].total=temp[i].total;
temp[i-1].average=temp[i].average;
}
printf("\n\t====>删除成功!\n");
n--;
getchar();
saveflag=1;
}
else
Nofind();
getchar();
}
else if(sel==2)
{
stringinput(findmess,15,"请输入一个已经存在的学号:");
p=Locate(temp,n,findmess,"num");
getchar();
if(p!=-1)
{
for(i=p+1;i<n;i++)
{
strcpy(temp[i-1].num,temp[i].num);
strcpy(temp[i-1].name,temp[i].name);
strcpy(temp[i-1].sex,temp[i].sex);
temp[i-1].Chinese=temp[i].Chinese;
temp[i-1].Math=temp[i].Math;
temp[i-1].English=temp[i].English;
temp[i-1].Computer=temp[i].Computer;
temp[i-1].total=temp[i].total;
temp[i-1].average=temp[i].average;
}
printf("\n\t====>删除成功!\n");
n--;
getchar();
saveflag=1;
}
else
Nofind();
getchar();
}
return n;
}