找不到student数组,错误应该在前面的代码里面。
代码在这
#include<stdio.h>
#include<strings.h>
#include<stdlib.h>
#define max 300
struct STUDENT{ //建立关于学生信息的结构体
int id;
char name[10];
char sex[5];
char home[20];
char born[10];
int age;
int phone;
}student[max];
void quit(int n) //退出模块,判断用户是否需要保存学生信息
{
printf("是否需要保存系统中的学生信息到本地(1:YES 2:NO)\n");
int p,i=0;
scanf("%d",&p);
if(p==1)
{
printf("是否将学生信息保存到当前目录下:(1:YES 2:NO)\n");
int o;
scanf("%d",&o);
while(1){ //建立while循环,考虑用户输入错误,增强用户体验
if(o==1)
{
char filename[50];
printf("请输入保存的文件名(例如students.txt)\n");
scanf("%s",&filename);
FILE *fp=fopen(filename,"w+"); //定义文件指针
if(fp!=NULL)
{
while(i<n&&student[i].id!=-1){ //while循环输出学生信息
fprintf(fp,"%04d%-7s%-7s%-7s%-7s%04d%04d\n",student[i].id,student[i].name,student[i].sex,student[i].home,
student[i].born,student[i].age,student[i].phone);
i++;
}
printf("保存学生信息成功!\n");
}else{
printf("学生信息保存失败!\n");
}
fclose(fp); //解除对文件指针的引用
break;
}
else if(o==2){ //用户需要自主定义保存文件位置的情况
char path[75];
printf("请输入完整的保存路径:(例如:C:\\User\\DELL\\Desktop\\students.txt)\n");
scanf("%s",&path);
FILE *fp=fopen(path,"w+");
if(fp!=NULL)
{
while(i<n&&student[i].id!=-1){
fprintf(fp,"%04d%-7s%-7s%-7s%-7s%04d%04d\n",student[i].id,student[i].name,student[i].sex,student[i].home,
student[i].born,student[i].age,student[i].phone);
i++;
}
printf("保存学生信息成功!\n");
}
else {
printf("保存学生信息失败!\n");
}
fclose(fp);
break;
}
else {
printf("输入错误!请重新输入(1:YES 2:NO)\n"); //输入错误可以立刻重新输入,增强用户体验
}
}
}
}
void change(int n)
{
while(1){ //在每个模块都加入了while循环,用户输入错误不必退出模块,可以立刻重新输入
printf("请输入需要修改的学生学号:");
int changeid,i;
scanf("%d",&changeid);
for(i=0;i<n;i++)
{
if(student[i].id==changeid&&changeid!=-1) //找到了需修改学生信息的学号
{
printf("查询到的学生信息如下:\n");
printf("学号 姓名 性别 地址 出生年月 年龄 邮箱 联系方式\n");
printf("%04d%-7s%-7s%-7s%-7s%04d%04d\n",student[i].id,student[i].name,student[i].sex,student[i].home,
student[i].born,student[i].age,student[i].phone);
printf("请输入您要修改的选项:1.修改学号2.修改姓名3.修改性别4.修改地址5.修改出生年月6.修改年龄7.修改邮箱8.修改联系方式\n"); //快速修改学生信息
int p;
scanf("%d",&p);
switch (p)
{
case 1:printf("请输入修改后的学号:");
int changeid;
scanf("%d",&changeid);
student[i].id=changeid;
printf("修改学生学号成功!\n");
break;
case 2:printf("请输入修改后的姓名:");
char changename[10];
scanf("%s",&changename);
strcpy(student[i].name,changename);
printf("修改学生姓名成功!\n");
break;
case 3:printf("请输入修改后的性别:");
char changesex[5];
scanf("%s",&changesex);
strcpy(student[i].sex,changesex);
printf("修改学生性别成功!\n");
break;
case 4:printf("请输入修改后的地址:");
char changehome[20];
scanf("%s",&changehome);
strcpy(student[i].home,changehome);
printf("修改学生地址成功!\n");
break;
case 5:printf("请输入修改后的出生年月:");
char changeborn[10];
scanf("%s",&changeborn);
strcpy(student[i].born,changeborn);
printf("修改学生出生年月成功!\n");
break;
case 6:printf("请输入修改后的年龄:");
int changeage;
scanf("%d",&changeage);
student[i].age=changeage;
printf("修改学生年龄成功!\n");
break;
case 7:printf("请输入修改后的联系方式:");
int changephone;
scanf("%d",&changephone);
student[i].phone=changephone;
printf("修改学生联系方式成功!\n");
break;
default:
printf("输入错误!\n");
break;
}
}
}
printf("是否需要继续修改学生信息(1:YES 2:NO)\n");
int p; scanf("%d",&p);
if(p==2)
break;
}
printf("输入回车以继续......\n");
getchar();
getchar();
}
void save(int n) //保存学生信息模块
{
int i;
printf("系统中已储存的学生信息如下:\n");
printf("学号 姓名 性别 地址 出生年月 年龄 邮箱 联系方式\n");
for(i=0;i<n;i++)
{
if(student[i].id!=-1) //筛选没有被删除的学生信息
printf("%04d%-7s%-7s%-7s%-7s%04d%04d\n",student[i].id,student[i].name,student[i].sex,student[i].home,
student[i].born,student[i].age,student[i].phone);
}
printf("是否要保存在当前系统cpp文件目录下?(1:YES 2:NO)\n");
int choice;
scanf("%d",&choice);
if(choice==2){
printf("请输入完整的txt数据库保存路径:例如(C:\\User\\DELL\\Desktop\\students.txt)");
char path[50];
scanf("%s",&path);
FILE *fp=fopen(path,"w+");
if(fp!=NULL) //若成功打开文件指针,保存信息
{
for(i=0;i<n;i++)
{
if(student[i].id!=-1)
fprintf(fp,"%04d%-7s%-7s%-7s%-7s%04d%04d\n",student[i].id,student[i].name,student[i].sex,student[i].home,
student[i].born,student[i].age,student[i].phone);
}
printf("保存学生信息成功!\n");
printf("输入回车以继续......\n");
getchar();
getchar();
}
else //若打开文件指针失败,反映给用户
{
printf("创建txt文本失败!请检查当前路径是否正确!\n");
printf("输入回车以继续......\n");
getchar();
getchar();
}
}else if(choice==1)
{
char filename[50];
printf("请输入完整的保存文件名(例如:students.txt):\n");
scanf("%s",&filename);
FILE *fp=fopen(filename,"w+");
if(fp!=NULL)
{
for(i=0;i<n;i++)
{
if(student[i].id!=-1)
fprintf(fp,"%04d%-7s%-7s%-7s%-7s%04d%04d\n",student[i].id,student[i].name,student[i].sex,student[i].home,
student[i].born,student[i].age,student[i].phone);
}
printf("保存学生信息成功!\n");
printf("输入回车以继续......\n");
getchar();
getchar();
}else { //若打开文件指针失败,反映给用户
printf("保存学生信息失败!\n");
printf("输入回车以继续......\n");
getchar();
getchar();
}
fclose(fp);
}else //若输入序号错误,反映给用户
{
printf("输入序号有误!请重新输入:");
scanf("%d",&choice);
}
}
int leading(int n) //导入txt文件信息模块
{
struct LSTUDENT{ //建立新的结构体以储存本地txt文件中的学生信息
int leading_id;
char leading_name[10];
char leading_sex[5];
char leading_home[20];
char leading_born[10];
int leading_age;
int leading_phone;
} lstudent[max];
int choice;
printf("请注意,导入文件必须按照规定格式,否则将导入失败\n");
printf("需要导入的txt数据库是于系统cpp程序位于同一文件夹下:(1:YES 2:NO)");
scanf("%d",&choice);
if(choice==1)
{
char filename[50],ch;
printf("请输入完整的txt文件名:");
scanf("%s",&filename);
FILE *fp=NULL;
fp=fopen(filename,"r");
if(fp!=NULL)
{
int p,i,m=0;
printf("打开文件成功\n");
ch=fgetc(fp);
if(feof(fp))
{
printf("未检测到学生信息!\n");
printf("输入回车以继续......");
getchar();
getchar();
}
else{
printf("已检测到如下数据,是否导入系统:(1:YES 2:NO):\n");
printf("学号 姓名 性别 地址 出生年月 年龄 邮箱 联系方式\n");
while(!feof(fp))
{
fscanf(fp,"%d%s%s%s%s%d%d\n",&Istudent[i].leading_id,&Istudent[i].leading_name,&Istudent[i].leading_sex,&Istudent[i].leading_home,
&Istudent[i].leading_born,&Istudent[i].leading_age,&Istudent[i].leading_phone);
printf("%04d%-7s%-7s%-7s%-7s%04d%04d\n",Istudent[i].leading_id,Istudent[i].leading_name,Istudent[i].leading_sex,Istudent[i].home,
Istudent[i].leading_born,Istudent[i].leading_age,Istudent[i].leading_phone);
m++;
i++;
}
scanf("%d",&p);
if(p==1)
{
for(i=0;i<m;i++)
{
student[n].id=lstudent[i].leading_id;
student[n].age=lstudent[i].leading_age;
student[n].phone=lstudent[i].leading_phone;
strcpy(student[n].home,lstudent[i].leading_home);
strcpy(student[n].name,lstudent[i].leading_name);
strcpy(student[n].sex,lstudent[i].leading_sex);
strcpy(student[n].born,lstudent[i].leading_born);
n++;
}
printf("导入新学生信息成功!\n");
printf("输入回车以继续.....");
getchar();
getchar();
return n;
}
else{
printf("放弃导入学生信息!\n");
printf("输入回车以继续.....");
getchar();
getchar();
return n;
}
}
}
else
{
printf("未找到该txt文件,请检查文件名是否正确!\n");
printf("放弃导入学生信息!\n");
printf("输入回车以继续.....");
getchar();
getchar();
return n;
}
}
else if (choice==2)
{
char path[50];
printf("请输入完整的txt数据库路径:例如(C:\\User\\DELL\\Desktop\\students.txt)\n");
scanf("%s",&path);
FILE *fp=fopen(path,"r+");
if(fp!=NULL)
{
int p,i,m=0;
printf("打开文件成功\n");
printf("已检测到如下数据,是否导入系统:(1:YES 2:NO):\n");
printf("学号 姓名 性别 地址 出生年月 年龄 邮箱 联系方式\n");
while(!feof(fp))
{
fscanf(fp,"%d%s%s%s%s%d%d\n",&Istudent[i].leading_id,&Istudent[i].leading_name,&Istudent[i].leading_sex,&Istudent[i].leading_home,
&Istudent[i].leading_born,&Istudent[i].leading_age,&Istudent[i].leading_phone);
printf("%04d%-7s%-7s%-7s%-7s%04d%04d\n",Istudent[i].leading_id,Istudent[i].leading_name,Istudent[i].leading_sex,Istudent[i].home,
Istudent[i].leading_born,Istudent[i].leading_age,Istudent[i].leading_phone);
m++;
i++;
}
scanf("%d",&p);
if(p==1)
{
for(i=0;i<m;i++)
{
student[n].id=lstudent[i].leading_id;
strcpy(student[n].home,lstudent[i].leading_home);
student[n].phone=lstudent[i].leading_phone;
strcpy(student[n].name,lstudent[i].leading_name);
strcpy(student[n].sex,lstudent[i].leading_sex);
student[n].age=lstudent[i].leading_age;
strcpy(student[n].born,lstudent[i].leading_born);
n++;
}
printf("导入新学生信息成功!\n");
printf("输入回车以继续.....");
getchar();
getchar();
return n;
}
else{
printf("放弃导入学生信息!\n");
printf("输入回车以继续.....");
getchar();
getchar();
return n;
}
}
else
{
printf("未找到该txt文件,请检查文件名是否正确!\n");
printf("放弃导入学生信息!\n");
printf("输入回车以继续.....");
getchar();
getchar();
return n;
}
}
}
void search(int n)
{
int j,i=0,p=0;
printf("请输入您的查询方式:\n1.按学号查询\n2.按姓名查询\n");
scanf("%d",&j);
if(j==1){
int k;
printf("请输入查询的学号:");
scanf("%d",&k);
while(i<n)
{
if(student[i].id==k&&p==0&&student[i].id!=-1)
{
p++;
printf("学号 姓名 性别 地址 出生年月 年龄 邮箱 联系方式\n");
printf("%04d%-7s%-7s%-7s%-7s%04d%04d\n",student[i].id,student[i].name,student[i].sex,student[i].home,
student[i].born,student[i].age,student[i].phone);
}else if(student[i].id==k&&student[i].id!=-1)
{
p++;
printf("%04d%-7s%-7s%-7s%-7s%04d%04d\n",student[i].id,student[i].name,student[i].sex,student[i].home,
student[i].born,student[i].age,student[i].phone);
}
i++;
}
if(p==0)
{
printf("查询失败,没有找到该学号的学生!\n");
}
}else if(j==2)
{
printf("请输入查询的姓名:");
char searchname[10];
scanf("%s",&searchname);
while(i<n){
if(strcmp(searchname,student[i].name)==0&&p==0)
{
p++;
printf("学号 姓名 性别 地址 出生年月 年龄 邮箱 联系方式\n");
printf("%04d%-7s%-7s%-7s%-7s%04d%04d\n",student[i].id,student[i].name,student[i].sex,student[i].home,
student[i].born,student[i].age,student[i].phone);
}else if(strcmp(searchname,student[i].name)==0&&p!=0)
{
p++;
printf("%04d%-7s%-7s%-7s%-7s%04d%04d\n",student[i].id,student[i].name,student[i].sex,student[i].home,
student[i].born,student[i].age,student[i].phone);
}
i++;
}
if(p==0)
{
printf("查询失败,没有找到该姓名的学生!\n");
}
}
printf("输入回车以继续.....");
getchar();
getchar();
}
int del(int n){
printf("请输入您要删除的学生的学号:");
int i;
scanf("%d",&i);
int j,p=0;
while(1){
p=0;
for(j=0;j<n;j++)
{
if(student[j].id==i){
p++;
printf("已查询到此学号的学生信息如下:\n");
printf("学号 姓名 性别 地址 出生年月 年龄 联系方式\n");
printf("%04d%-7s%-7s%-7s%-7s%04d%04d\n",student[i].id,student[i].name,student[i].sex,student[i].home,
student[i].born,student[i].age,student[i].phone);
printf("请确认是否删除此学生信息(1.确认 2.取消): ");
int k=0;
scanf("%d",&k);
if(k==1)
{
student[j].id=-1;
printf("删除学生信息成功!\n");
} else {
printf("操作取消\n");
}
}
}
if(p==0)
{
printf("未查询到相应的学生信息,请重新输入学号(输入-1则退出):");
scanf("%d",&i);
}
if(i==-1)
{
printf("输入回车以继续.....");
getchar();
getchar();
return n;
}
}
}
int append(int n)
{
int choice;
while(1){
printf("请输入学生的学号: ");
scanf("%d",&student[n].id);
printf("\n请输入学生的姓名:");
scanf("%s",&student[n].name);
printf("\n请输入学生的性别: ");
scanf("%s",&student[n].sex);
printf("\n请输入学生的地址: ");
scanf("%s",&student[n].home);
printf("\n请输入学生的出生年月: ");
scanf("%s",&student[n].born);
printf("\n请输入学生的年龄: ");
scanf("%d",&student[n].age);
printf("\n请输入学生的联系电话: ");
scanf("%d",&student[n].phone);
printf("添加学生信息成功!\n");
n++;
printf("是否需要继续添加学生信息?(1:YES 2:NO)\n");
scanf("%d",&choice);
if(choice==2)
{
printf("输入回车以继续.....\n");
getchar();
getchar();
return n;
}
}
}
void look(int n)
{
int i=0,p=0,j=0,t;
int o=0;
for(i=0;i<n;i++)
{
if(student[i].id!=-1) p++;
break;
}
if(p!=0){
int sort[max];
for(i=0;i<n;i++)
{
if(student[i].id!=-1)
sort[i]=student[i].id;
}
for(i=0;i<n-1;i++){
for(j=i;j<n;j++)
{
if(sort[i]>sort[j])
{
t=sort[i];
sort[i]=sort[j];
sort[j]=t;
}
}
}
printf("系统中已储存的学生信息如下:\n");
printf("学号 姓名 性别 地址 出生年月 年龄 联系方式\n");
for(i=0;i<n&&o<n;i++)
{
for(j=0;j<n;j++)
{
if(sort[i]==student[j].id&&student[j].id!=-1){
o++;
printf("%04d%-7s%-7s%-7s%-7s%04d%04d\n",student[i].id,student[i].name,student[i].sex,student[i].home,
student[i].born,student[i].age,student[i].phone);
}
}
}
}else{
printf("未查询到学生信息!\n");
}
printf("输入回车以继续.....");
getchar();
getchar();
}
int main()
{
int n=0,m=0,l=0; //n为实际系统中储存的学生数,m为不合法的学生数
while(1)
{
system("cls");
system("color 3E");
int choice;
printf(" ------欢迎来到学生信息管理系统2.2.8------\n");
printf("|* 1.增添学生信息 *|\n");
printf("|* 2.删除学生信息 *|\n");
printf("|* 3.修改学生信息 *|\n");
printf("|* 4.查询学生信息 *|\n");
printf("|* 5.查看全部信息 *|\n");
printf("|* 6.导入学生信息 *|\n");
printf("|* 7.保存学生信息 *|\n");
printf("|* 0.退出系统 *|\n");
printf(" -------------------------------------------\n");
printf("请输入您的选择: ");
scanf("%d",&choice);
while(choice!=0&&choice!=1&&choice!=2&&choice!=3&&choice!=4&&choice!=5&&choice!=6&&choice!=7i){
printf("输入选择错误,请重新输入:");
scanf("%d",&choice);
}
switch (choice)
{
case 1: n=append(n); //增添函数实际上应该在n(实际学生人数)的后面继续添加学生信息 ,用n接受返回的实际学生人数
break;
case 2: n=del(n); //“删除”函数并没有真正删除(除非有链表技术支持),只是让被删除学生id改为-1
m++; //每“删除”一条学生信息,不合法学生信息++
break;
case 3: change(n);
break;
case 4: search(n);
break;
case 5: look(n);
break;
case 6: n=leading(n);
break;
case 7: save(n);
break;
case 0: quit(n);
printf("感谢您的使用!\n");
system("taskkill -f -im 学生信息管理系统.exe");
return 0;
break;
}
}
return 0;
}