帮忙改错
/*头文件*/#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#include <string.h>
#define MAX_NUM 2000
#define DAT_FILENAME "Information.txt"
/*定义数据结构*/
struct date
{
int year; /*年*/
int month; /*月*/
int day; /*日*/
};
typedef struct student
{
int ID; /*学号*/
char Name[8]; /*姓名*/
int age; /*年龄*/
char xb; /*性别*/
char telephone[10]; /*电话*/
char address[20]; /*地址*/
struct date birthday; /*生日*/
char email[20]; /*电子邮件*/
}STUDENT;
/******函数原型******/
int FindstudentID(STUDENT stu[],int findID,int Max);
int FindstudentName(STUDENT stu[],char findname[],int Max);
void DisplayInformation(STUDENT stu[],int Max);
void DispMainmenu();
int InformationInput(STUDENT stu[],int cn);
void QueryInformation(STUDENT stu[],int Max);
void EditInformation(STUDENT stu[],int Max);
void Save(STUDENT stu[],int Max);
int Read(STUDENT stu[]);
void Sort(STUDENT stu[],int Max);
void Delete(STUDENT stu[],int Max);
/*显示主菜单*/
void DispMainMenu()
{
printf("*****信息管理系统*****\n");
printf("\t1--信息录入 \t2--信息修改\n");
printf("\t3--信息查询 \t4--保存到数据文件\n");
printf("\t5--打开数据文件 \t0--推出\n");
printf("**********************");
printf("请选择(0--5):");
}
/*显示所有学生信息*/
void DisplayInformation(STUDENT stu[],int Max)
{
int i;
printf("\n序号\t学号\t姓名\t年龄\t性别\t电话\t地址\t生日\tEMAIL\n");
for(i=0;i<Max;i++)
{printf("%d\t%d\t%s\t%d\t",i+1,stu[i].ID,stu[i].Name,stu[i].age);
printf("%c\t%s\t%s\t",stu[i].xb,stu[i].telephone,stu[i].address);
printf("%d%d%d",stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day);
printf("\t%s\n",stu[i].email);
}
printf("\n");
}
/*查找指定学号的学生信息*/
int FindstudentID(STUDENT stu[],int findID,int Max)
{
int i;
for(i=0;i<Max;i++)
{
if(stu[i].ID==findID)
break;
}
if(i<Max) /*找到I《MAX,说明是执行BREAK后结束循环,即找到指定学生*/
return i;
else
return -1;
}
/*查找指定姓名的学生*/
int FindstudentName(STUDENT stu[],char findname[],int Max)
{
int i;
for(i=0;i<Max;i++)
{
if(strcmp(stu[i].Name,findname)==0)
break;
}
if(i<Max) /*找到I《MAX,说明是执行BREAK后结束循环,即找到指定学生*/
return i;
else
return -1;
}
/*学生信息录入*/
int InformationInput(STUDENT stu[],int cn)
{/*cn为原有记录数*/
int number,i;
printf("\n请输入本次录入人数:");
scanf("%d",&number);
if(number>MAX_NUM)
{
printf("您输入的人数太多,大于%d!\n",MAX_NUM);
return(0);
}
for(i=cn;i<number;i++) /*输入number个学生的信息*/
{
printf("请输入第%d个学生的学号(8个字符以内):",i+1);
scanf("%d",&stu[i].ID);
printf("\t\t\t姓名:\t");
scanf("%s",stu[i].Name);
printf("\t\t\t年龄:\t");
scanf("%d",&stu[i].age);
printf("\t\t\t性别(男M,女W):\t");
scanf("%s",&stu[i].xb);
printf("\t\t\t电话:\t");
scanf("%s",stu[i].telephone);
printf("\t\t\t地址:\t");
scanf("%s",stu[i].address);
printf("\t\t\t生日:\t");
scanf("%d%d%d",&stu[i].birthday.year,&stu[i].birthday.month,&stu[i].birthday.day);
printf("\t\t\temail:\t");
scanf("%s",stu[i].email);
}
printf("您输入的信息是:\n");
DisplayInformation(stu,number+cn);
Sort(stu,number+cn);
}
/*学生信息查询*/
void QueryInformation(STUDENT stu[],int Max)
{
char select;
int i;
int findID;
char findname[8];
printf("**请选择查询方式**\n");
printf("\t1--按学号查询;\t2--按姓名查询\n");
printf("******************\n");
printf("请选择(1--2):"); /*显示菜单信息*/
select=getchar();
getchar();
switch(select)
{
case'1':;
printf("\n按学号查询\n请输入学号:");
scanf("%d",&findID);
if((i=FindstudentID(stu,findID,Max))!=-1)/*找到指定学号学生*/
{
printf("\n查询结果如下:\n");
printf("\n学号\t姓名\t年龄\t性别\t电话\t地址\t生日\t电子邮件\n");
printf("%d\t%s\t%d\t",stu[i].ID,stu[i].Name,stu[i].age);
printf("%c\t%s\t%s\t",stu[i].xb,stu[i].telephone,stu[i].address);
printf("%d\t%d\t%d",stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day);
printf("\t%s\n",stu[i].email);
}
else /*没有找到*/
printf("您输入的学号不存在\n");
break;
case'2':;
printf("\n按姓名查询\n请输入姓名:");
scanf("%s",findname);
if((i=FindstudentName(stu,findname,Max))!=-1)/*找到指定姓名学生*/
{
printf("\n查询结果如下:\n");
printf("\n学号\t姓名\t年龄\t性别\t电话\t地址\t生日\t电子邮件\n");
printf("%d\t%s\t%d\t",stu[i].ID,stu[i].Name,stu[i].age);
printf("%c\t%s\t%s\t",stu[i].xb,stu[i].telephone,stu[i].address);
printf("%d\t%d\t%d",stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day);
printf("\t%s\n",stu[i].email);
}
else /*没有找到*/
printf("您输入的姓名不存在\n");
break;
default:;
printf("选择错误\n");
}
}
/*修改学生信息*/
void EditInformation(STUDENT stu[],int Max)
{
int i;
int findID; /*findID-要查找的学生的学号*/
char select;
printf("\n请输入学生的学号:");
scanf("%d",&findID);
if((i=FindstudentID(stu,findID,Max))!=-1) /*找到指定学号的学生*/
{
printf("******请选择查询修改的方式*****\n");
printf("\t1--修改信息;\t2--删除信息\n");
printf("*******************************\n");
printf("请选择(1--2):");
select=getchar();
getchar();
switch(select)
{case'1':; /*修改信息*/
printf("您选择的是信息修改:\n");
printf("姓名:%s\n",stu[i].Name);
printf("原信息:学号:%d\t年龄:%d\t性别:%c\n",stu[i].ID,stu[i].age,stu[i].xb);
printf("\t电话:%s\t地址:%s\temail:%s\n",stu[i].telephone,stu[i].address,stu[i].email);
printf("请输入新信息\n");
printf("学号:\t");
scanf("%d",&stu[i].ID);
printf("请输入姓名:\n");
scanf("%s",stu[i].Name);
printf("年龄:\n");
scanf("%d",&stu[i].age);
printf("性别:(男M女W)\n");
scanf("%s",&stu[i].xb);
printf("电话:\n");
scanf("%s",&stu[i].telephone);
printf("地址:\n");
scanf("%s",&stu[i].address);
printf("生日:\n");
scanf("%d%d%d",&stu[i].birthday.year,&stu[i].birthday.month,&stu[i].birthday.day);
printf("email:\n");
scanf("%s",stu[i].email);
break;
case'2':;/*删除信息*/
printf("你选择的是删除:\n");
Delete(stu,i,Max);
break;
}
}
else /*没有找到学号正定的记录*/
printf("您输入的学号不存在!\n");
}
/*按学号排列*/
void Sort(STUDENT stu[],int Max)
{/*冒泡法排序*/
int i,j;
STUDENT p;
for(i=0;i<Max-1;i++)
for(j=0;j<Max-1-i;j++)
if(stu[j].ID>=stu[j+1].ID)
{
p=stu[j];
stu[j]=stu[j+1];
stu[j+1]=p;
}
DisplayInformation(stu,Max);/*显示排序后学生信息*/
}
/*保存数据到文件中*/
void Save(STUDENT stu[],int Max)
{
int i;
FILE *fp;
if((fp=fopen(DAT_FILENAME,"w+"))!=NULL) /*以w+方式打开文件*/
{
for(i=0;i<Max;i++)
fwrite(&stu[i],sizeof(STUDENT),1,fp); /*将STU[i]写入文件*/
fclose(fp);
}
else
printf("cannot open file!\n");
}
/**打开数据文件**/
int Read(STUDENT stu[])
{
int i;
int result=-1;
FILE *fp;
if((fp=fopen(DAT_FILENAME,"r"))!=NULL)
{
i=0;
/*读文件中的内容到STU数组中*/
while(fread(&stu[i],sizeof(STUDENT),1,fp)!=0)
i++; /**读出数据加1*/
result=i; /*读出记录总数*/
fclose(fp);
}
else
printf("cannot open file!\n");
return result; /*返回读出记录总数*/
}
/*删除信息*/
void Delete(STUDENT stu[],int n,int Max)
{
FILE *fp;
int j;
if((fp=fopen(DAT_FILENAME,"rb"))==NULL) /*打开数据文件*/
{
printf("cannot open file!\n");
exit(0);
}
printf("\noriginal data:\n");
DisplayInformation(stu,Max); /*显示删除前数据信息*/
/*删除第N个学生的信息,数据STU中STU[N]之后的元素向前移一个元素的位置*/
for(j=n;j<Max-1;j++)
{
strcpy(stu[j].Name,stu[j+1].Name);
strcpy(stu[j].telephone,stu[j+1].telephone);
stu[j].age=stu[j+1].age;
stu[j].xb=stu[j+1].xb;
stu[j].birthday.year=stu[j+1].birthday.year;
stu[j].birthday.month=stu[j+1].birthday.month;
stu[j].birthday.day=stu[j+1].birthday.month;
strcpy(stu[j].address,stu[j+1].address);
strcpy(stu[j].email,stu[j+1].email);
}
Max=Max-1; /*删除后学生数-1*/
printf("Now,conent of file:\n");
Save(stu,Max); /*保存信息*/
DisplayInformation(stu,Max); /*显示删除后的学生信息*/
}
/***主函数**/
int main()
{
char select;
STUDENT stu[MAX_NUM];
int current_number=0;
while(select!='o')
{
system("cls"); /*清屏*/
DispMainMenu(); /*显示主菜单*/
select=getchar();
getchar();
switch(select)
{
case'0':;
printf("\n退出!\n");
_beep(300,400);
continue;
case'1':;
printf("选择的是信息录入!\n");
current_number=InformationInput(stu,current_number);
break;
case'2':;
printf("选择的是修改!\n");
EditInformation(stu,current_number);
break;
case'3':;
printf("选择的是信息查询\n");
QueryInformation(stu,current_number);
break;
case'4':;
printf("选择的是保存信息到文件\n");
Save(stu,current_number);
break;
case'5':;
printf("选择的是打开文件\n");
if(current_number=Read(stu)==-1)
current_number=0;
else
DisplayInformation(stu,current_number);
break;
default:;
printf("\n选择错误!\n");
}
}
return(0);
}
只有一个错误。。。
Delete
函数的
不懂
大虾帮忙。。。