#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define SIZE 2
struct student
{
int number;
char name[20];
char sex[20];
char cla[20];
char score[20];
char sum[20];
} stu[SIZE];
void menu();
void write();
void save(int x);
void SaveOneStudent(int i);
void SaveAllStudent(int n);
void inturn (struct student c[]);
void save2();
int AddStudent(int n);
void InputOnestudent(int i);
int DelStudent(int n);
void ModifyStudent(int n);
void OutputOneStudent(int i);
void SearchMenu(int n);
void SearchNumber(int n);
void SearchName(int n);
void SearchXueyuan(int n);
void SearchCla(int n);
void search();
void read();
void look();
int main()
{
int n=SIZE;
int choice;
printf("\n\n\n\n\n");
printf("****************************欢迎使用学生档案管理系统****************************\n");
while (1)
{
menu();
printf("请选择0~5:");
scanf("%d", &choice);
if ( choice==0 )
{
printf("\t\t\t\t谢谢使用!!!");
break;
}
switch(choice)
{
case 1:
write();
save(SIZE);
break;
case 2:
look();
break;
case 3:
DelStudent(n);
break;
case 4:
ModifyStudent(n);
break;
case 5:
SearchMenu(n);
break;
case 0:
printf("\n谢谢使用!再见!\n");
default:
printf("\n按键错误!请重新选择!\n");
}
}
return 0;
}
void menu()
{
printf("\n\t\t\t\t请输入所需操作\n");
printf("*************************************\n");
printf("\t\t\t\t1.录入学生信息并保存\n");
printf("\t\t\t\t2.浏览学生信息\n");
printf("\t\t\t\t3.删除学生信息\n");
printf("\t\t\t\t4.修改学生信息\n");
printf("\t\t\t\t5.查询学生信息(按姓名查询)or(按生源地查询)\n");
printf("\t\t\t\t0.退出系统\n");
printf("**************组长:钱翼龙、组员:李明达、杨癸强**************\n");
printf("\n\n\n");
}
void write()
{
system("cls");
int i;
for(i=0; i<SIZE; i++)
{
printf("学号:");
scanf("%d",&stu[i].number);
printf("姓名:");
scanf("%s",&stu[i].name);
printf("性别:");
scanf("%s",&stu[i].sex);
printf("出生年月:");
scanf("%s",&stu[i].cla);
printf("生源地:");
scanf("%s",&stu[i].score);
printf("电话:");
scanf("%s",&stu[i].sum);
}
printf("\n\n\n");
}
void save(int x)
{ system("cls");
FILE *fp;
int i;
if((fp=fopen("student.dat","w"))==NULL)
{
printf("cannot open file\n");
exit(1);
}
for(i=0; i<SIZE; i++)
if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
printf("file write error\n");
fclose(fp);
printf("\n信息保存成功!\n");
printf("\n\n\n");
}
void SaveOneStudent(int i)
{ system("cls");
FILE *fp;
if((fp=fopen("student.dat","rb+"))==NULL)
{
printf("文件打开失败!\n");
exit(1);
}
fseek(fp,i,0);
fwrite(&stu[i],sizeof(struct student),1,fp);
fclose(fp);
printf("\n\n\n");
}
void SaveAllStudent(int n)
{ system("cls");
FILE *fp;
if((fp=fopen("student.dat","wb"))==NULL)
{
printf("文件打开失败!\n");
exit(1);
}
fwrite(stu,sizeof(struct student),n,fp);
fclose(fp);
printf("\n\n\n");
}
void look()
{ system("cls");
FILE *fp;
if((fp=fopen("student.dat","r"))==NULL)
{
printf("文件打开失败!\n");
exit(1);
}
int d=0,ans=0,i=0;
while(!feof(fp))
{
if(stu[i].number==0) break;
fscanf(fp,"%d%s%s%s%s%s",&stu[i].number,stu[i].name,stu[i].sex,stu[i].cla,stu[i].score,stu[i].sum);
printf("学号: ");
printf("%d\n",stu[i].number);
printf("姓名: ") ;
printf("%s\n",stu[i].name);
printf("性别: ");
printf("%s\n",stu[i].sex);
printf("出生时间:");
printf("%s\n",stu[i].cla);
printf("生源地:");
printf("%s\n",stu[i].score);
printf("电话: ");
printf("%s\n\n\n\n",stu[i].sum);
i++;
}
fclose(fp);
printf("请输入任意键退出\n");
{
getchar();
getchar();
return;
}
printf("\n\n\n");
}
int AddStudent(int n)
{ system("cls");
char c='y';
FILE *fp;
if((fp=fopen("student.dat","ab"))==NULL)
{
printf("文件打开失败!\n");
exit(1);
}
while(c=='y')
{
printf("\n请输入要增加的同学的信息:");
InputOnestudent(n);
fwrite(&stu[n],sizeof(struct student),1,fp); n++;
printf("\n继续输入其他同学信息吗?\n");
printf("确定进行增加请按1;不进行增加请按2\n");
c=getchar();
getchar();
}
printf("\n按任意键继续!\n");
getchar();
fclose(fp);
return(n);
}
void InputOnestudent(int i)
{ system("cls");
printf("学号\t姓名\性别\t出生日期\t生源地\t电话\n"); scanf("%d\t%s\t%s\t%s\t%s\t%s\n",&stu[i].number,stu[i].name,stu[i].sex,stu[i].cla,stu[i].score,stu[i].sum);
}
void OutputOneStudent(int i)
{ system("cls");
printf("学号:%d 姓名:%s 性别:%s \n",stu[i].number,stu[i].name,stu[i].sex);
printf("出生日期:%s 生源地:%s 电话:%s \n",stu[i].cla,stu[i].score,stu[i].sum);
}
int DelStudent(int n)
{ system("cls");
void OutputOneStudent(int i);
int i,k=-1,x;
char c1='y',c2;
c2='n';
printf("\n请输入要删除的同学的学号:");
scanf("%d",&x);
for(i=0; i<n; i++)
{
if(x==stu[i].number)
{
k=i;
printf("\n该同学信息如下:\n");
OutputOneStudent(k);
printf("\n确定删除?\n");
printf("确定进行删除请按1;不进行删除请按2\n");
getchar();
c2=getchar();
if(c2=='1')
{
for(i=k; i<n; i++)
stu[i]=stu[i+1];
n--;
printf("删除成功!\n");
}
}
}
if(k<0)
printf("\n输入学号有误,请重新输入!");
save(n);
printf("\n按任意键继续!\n");
getchar();
return(n);
printf("\n\n\n");
}
void ModifyStudent(int n)
{ system("cls");
struct student temp;
int k=-1,x,i;
char c1='y',c2;
while(c1=='y')
{
c2='y';
printf("\n请输入要修改的同学的学号:");
scanf("%d",&x);
for(i=0; i<n; i++)
if(x==stu[i].number)
{
k=i;
break;
}
if(k<0)
printf("\n输入学号有误,请重新输入!");
else
{
printf("请输入要修改学生修改后的的信息\n");
printf("学号: ");
scanf("%d",&temp.number);
printf("姓名: ") ;
scanf("%s",temp.name);
printf("性别: ");
scanf("%s",temp.sex);
printf("出生时间:");
scanf("%s",temp.cla);
printf("生源地:");
scanf("%s",temp.score);
printf("电话: ");
scanf("%s",temp.sum);
stu[k]=temp;
printf("\n修改成功!\n");
break;
}
SaveAllStudent(k);
printf("\n继续修改操作吗?");
printf("\n继续修改请按1;不进行修改请按2\n");
c1=getchar();
getchar();
}
printf("\n按任意键继续!\n");
getchar();
printf("\n\n\n");
}
void SearchMenu(int n)
{ system("cls");
int selet;
while(1)
{
printf("**********************************************************\n");
printf("******************** 欢迎进入查询系统 *******************\n");
printf("**********************************************************\n");
printf("\n");
printf("********************* 请输入所需操作 *******************\n"); printf("**********************************************************\n");
printf("1.按姓名查询\n");
printf("2.按生源地查询\n");
printf("0.返回主菜单\n"); printf("**********************************************************\n");
printf("请输入操作选项:");
scanf("%d",&selet);
getchar();
switch(selet)
{
case 1:
SearchName(n);
break;
case 2:
SearchNumber(n);
break;
case 0:
return;
default:
printf("输入错误!请重新输入!\n");
}
}
printf("\n\n\n");
}
void SearchName(int n)
{ system("cls");
int i,j,k;
char xname[20],c='y';
k=-1;
printf("\n请输入学生姓名:");
gets(xname);
for(i=0,j=1; i<n; i++)
{
if(strcmp(stu[i].name,xname)==0)
{
k=i;
printf("学生%d的信息:\n",j++);
OutputOneStudent(k);
}
if(k==-1)
{
printf("\n抱歉!没有该学生信息!\n");
}
printf("\n按任意键继续!\n");
getchar();
printf("\n\n\n");
}
}
void SearchNumber(int n)
{ system("cls");
int i,j,k;
char xname[20],c='y';
k=-1;
printf("\n请输入生源地:");
gets(xname);
for(i=0,j=1; i<n; i++)
{
if(strcmp(stu[i].score,xname)==0)
{
k=i;
printf("学生%d的信息:\n",j++);
OutputOneStudent(k);
}
if(k==-1)
{
printf("\n抱歉!没有该学生信息!\n");
}
printf("\n按任意键继续!\n");
getchar();
printf("\n\n\n");
}
}

想把程序录入的信息保存上后,关闭整个程序,再次打开时上次录入的信息依然存在,应该如何做,求帮助!
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- 梦幻精灵_cq 2023-06-28 16:26关注解决 无用评论 打赏 举报 编辑记录
展开全部4条评论
- qzjhjxj 2023-06-29 08:57关注
整体修改完善如下,改动处见注释,供参考:
#include<stdio.h> #include<stdlib.h> #include<string.h> #define SIZE 50 // 修改 struct student { int number; char name[20]; char sex[5]; char cla[20]; char score[20]; char sum[20]; } stu[SIZE]; int n = 0; // 修改 void menu(); void save(int x); void AddStudent(); void InputOnestudent(int i); void DelStudent(); //修改 void ModifyStudent(); // 修改 void OutputOneStudent(int i); void SearchMenu(); // 修改 void SearchNumber(); // 修改 void SearchName(); // 修改 void read(); // 修改 void look(); // 修改 int main() { //int n = SIZE; 修改 int choice; read(); //修改 printf("\n\n\n\n\n"); printf("****************************欢迎使用学生档案管理系统****************************\n"); while (1) { menu(); printf("请选择0~5:"); scanf("%d", &choice); if (choice == 0) { save(n); // 修改 printf("\t\t\t\t谢谢使用!!!"); break; } switch (choice) { case 1: AddStudent(); // 修改 //write(); 修改 //save(n); 修改 break; case 2: look(); break; case 3: DelStudent(); break; case 4: ModifyStudent(); break; case 5: SearchMenu(); break; //case 0: 修改 // printf("\n谢谢使用!再见!\n"); 修改 default: printf("\n按键错误!请重新选择!\n"); } } return 0; } void menu() { printf("\n\t\t\t\t请输入所需操作\n"); printf("*************************************\n"); printf("\t\t\t\t1.录入学生信息并保存\n"); printf("\t\t\t\t2.浏览学生信息\n"); printf("\t\t\t\t3.删除学生信息\n"); printf("\t\t\t\t4.修改学生信息\n"); printf("\t\t\t\t5.查询学生信息(按姓名查询)or(按生源地查询)\n"); printf("\t\t\t\t0.退出系统\n"); printf("**************组长:钱翼龙、组员:李明达、杨癸强**************\n"); printf("\n\n\n"); } void AddStudent() { system("cls"); char c = 'y'; while (c == 'y' || c == 'Y') { printf("\n请输入要增加的同学的信息:\n"); InputOnestudent(n); n++; printf("\n继续增加信息吗?\n"); printf("(Y/y).继续 (N/n).退出\n"); scanf(" %c", &c); //c = getchar(); } printf("\n按任意键继续!\n"); getchar(); } void InputOnestudent(int i) { printf("学号:"); scanf("%d", &stu[i].number); printf("姓名:"); scanf("%s", stu[i].name); printf("性别:"); scanf("%s", stu[i].sex); printf("出生年月:"); scanf("%s", stu[i].cla); printf("生源地:"); scanf("%s", stu[i].score); printf("电话:"); scanf("%s", stu[i].sum); } void look() { system("cls"); int i = 0; if (n == 0) printf("记录为空!\n"); else { for (i = 0; i < n; i++) OutputOneStudent(i); } printf("请输入任意键退出\n"); getchar(); return; } void OutputOneStudent(int i) { printf("学号:%d 姓名:%s 性别:%s \n", stu[i].number, stu[i].name, stu[i].sex); printf("出生日期:%s 生源地:%s 电话:%s \n\n", stu[i].cla, stu[i].score, stu[i].sum); } void DelStudent() { system("cls"); int i, k = -1, x; char c1 = 'y', c2; c2 = 'n'; if (n == 0) { printf("记录为空!\n"); return; } printf("\n请输入要删除的同学的学号:"); scanf("%d", &x); for (i = 0; i < n; i++) { if (x == stu[i].number) { k = i; printf("\n该同学信息如下:\n"); OutputOneStudent(k); printf("\n确定删除?\n"); printf("确定进行删除请按1;不进行删除请按2\n"); getchar(); c2 = getchar(); if (c2 == '1') { for (i = k; i < n - 1; i++) //for (i = k; i < n; i++) stu[i] = stu[i + 1]; n--; printf("删除成功!\n"); } break; } } if (k < 0) printf("\n输入学号有误,请重新输入!"); printf("\n按任意键继续!\n"); getchar(); printf("\n"); } void ModifyStudent() { system("cls"); int k = -1, x, i; char c1 = 'y', c2; if (n == 0) { printf("记录为空!\n"); return; } while (c1 == 'y') { c2 = 'y'; printf("\n请输入要修改的同学的学号:"); scanf("%d", &x); for (i = 0; i < n; i++) if (x == stu[i].number) { k = i; break; } if (k < 0) printf("\n输入学号有误,请重新输入!"); else { printf("\n待修改的学生信息如下:\n"); OutputOneStudent(k); printf("请输入修改信息:\n"); InputOnestudent(k); printf("\n修改成功!\n"); } printf("\n继续修改操作吗?"); printf("\n继续修改请按 'y' ;不进行修改请按 'n' \n"); scanf(" %c", &c1); //c1 = getchar(); //getchar(); } printf("\n按任意键继续!\n"); getchar(); printf("\n\n\n"); } void SearchMenu() { system("cls"); int selet; if (n == 0) { printf("记录为空!\n"); return; } while (1) { printf("**********************************************************\n"); printf("******************** 欢迎进入查询系统 *******************\n"); printf("**********************************************************\n"); printf("\n"); printf("********************* 请输入所需操作 *******************\n"); printf("**********************************************************\n"); printf("1.按姓名查询\n"); printf("2.按生源地查询\n"); printf("0.返回主菜单\n"); printf("**********************************************************\n"); printf("请输入操作选项:"); scanf("%d", &selet); getchar(); switch (selet) { case 1: SearchName(); // 修改 break; case 2: SearchNumber(); // 修改 break; case 0: return; default: printf("输入错误!请重新输入!\n"); } } printf("\n\n\n"); } void SearchName() { system("cls"); int i, j, k; char xname[20], c = 'y'; k = -1; if (n == 0) { printf("记录为空!\n"); return; } printf("\n请输入学生姓名:"); gets_s(xname); for (i = 0, j = 1; i < n; i++) { if (strcmp(stu[i].name, xname) == 0) { k = i; printf("该学生的信息:\n"); OutputOneStudent(k); // 修改 break; } } if (k == -1) { printf("\n抱歉!没有该学生信息!\n"); } printf("\n按任意键继续!\n"); getchar(); printf("\n\n\n"); } void SearchNumber() { system("cls"); int i, j, k; char xname[20], c = 'y'; k = -1; if (n == 0) { printf("记录为空!\n"); return; } printf("\n请输入生源地:"); gets_s(xname); for (i = 0, j = 1; i < n; i++) { if (strcmp(stu[i].score, xname) == 0) { k = i; printf("该学生的信息:\n"); OutputOneStudent(k); // 修改 break; } } if (k == -1) { printf("\n抱歉!没有该学生信息!\n"); } printf("\n按任意键继续!\n"); getchar(); printf("\n\n\n"); } void save(int x) { system("cls"); FILE* fp; int i; if ((fp = fopen("student.dat", "w")) == NULL) { printf("cannot open file\n"); exit(1); } for (i = 0; i < x; i++) //for (i = 0; i < SIZE; i++) if (fwrite(&stu[i], sizeof(struct student), 1, fp) != 1) printf("file write error\n"); fclose(fp); printf("\n信息保存成功!\n"); printf("\n\n\n"); } void read() { FILE* fp; if ((fp = fopen("student.dat", "r")) == NULL){ printf("文件打开失败!\n"); return; } int i = n; while (1) { if (fread(&stu[i], sizeof(struct student), 1, fp) == 1) i++; else break; } n = i; fclose(fp); printf("记录成功加载!\n"); } //以下分界线,几个函数冗余了,可以删除。 #if 0 void write(); void SearchXueyuan(int n); void SearchCla(int n); void search(); void SaveOneStudent(int i); void SaveAllStudent(int n); void inturn(struct student c[]); void save2(); void write() { system("cls"); int i; for (i = 0; i < SIZE; i++) { printf("学号:"); scanf("%d", &stu[i].number); printf("姓名:"); scanf("%s", stu[i].name); //scanf("%s", &stu[i].name); printf("性别:"); scanf("%s", stu[i].sex); //scanf("%s", &stu[i].sex); printf("出生年月:"); scanf("%s", stu[i].cla); //scanf("%s", &stu[i].cla); printf("生源地:"); scanf("%s", stu[i].score); //scanf("%s", &stu[i].score); printf("电话:"); scanf("%s", stu[i].sum); //scanf("%s", &stu[i].sum); } printf("\n\n\n"); } void look() { system("cls"); FILE* fp; if ((fp = fopen("student.dat", "r")) == NULL) { printf("文件打开失败!\n"); return; //exit(1); } int d = 0, ans = 0, i = 0; while (1) //while (!feof(fp)) { //if (stu[i].number == 0) break; //fscanf(fp, "%d%s%s%s%s%s", &stu[i].number, stu[i].name, stu[i].sex, stu[i].cla, stu[i].score, stu[i].sum); if (fread(&stu[i], sizeof(struct student), 1, fp) == 1) { printf("学号: "); printf("%d\n", stu[i].number); printf("姓名: "); printf("%s\n", stu[i].name); printf("性别: "); printf("%s\n", stu[i].sex); printf("出生时间:"); printf("%s\n", stu[i].cla); printf("生源地:"); printf("%s\n", stu[i].score); printf("电话: "); printf("%s\n\n\n\n", stu[i].sum); i++; } else break; } fclose(fp); printf("请输入任意键退出\n"); { getchar(); getchar(); return; } printf("\n\n\n"); } void SaveOneStudent(int i) { system("cls"); FILE* fp; if ((fp = fopen("student.dat", "rb+")) == NULL) { printf("文件打开失败!\n"); exit(1); } fseek(fp, i, 0); fwrite(&stu[i], sizeof(struct student), 1, fp); fclose(fp); printf("\n\n\n"); } void SaveAllStudent(int n) { system("cls"); FILE* fp; if ((fp = fopen("student.dat", "wb")) == NULL) { printf("文件打开失败!\n"); exit(1); } fwrite(stu, sizeof(struct student), n, fp); fclose(fp); printf("\n\n\n"); } #endif
解决 无用评论 打赏 举报 编辑记录 关注
不知道你这个问题是否已经解决, 如果还没有解决的话:- 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/2224
- 这篇博客也不错, 你可以看下指针深入了解——函数指针,函数指针数组,指向函数指针数组的指针。
- 除此之外, 这篇博客: 广义表,这些操作必须要会中的 在做题之前,我特别写了这一篇关于广义表的基础操作,注释帮助大家更好的理解书上的代码,跟着我敲一敲,不要只复制粘贴哦,有基础者请绕过此文,直接去搞题吧 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
注:本文以一个例子来演示广义表的基本操作,含有一个头文件《GList.h》和一个测试源文件《main.cpp》
- 根据广义表字符串(((a,b,c),(d)),e)分解表头字符串、表尾字符串
- 根据分解好的字符串创建广义表
- 求深度
- 求长度
- 查找原子个数
- 撤销广义表
- 您还可以看一下 陈槐老师的软件测试全栈系列课程课程中的 利用通配符查找文件小节, 巩固相关知识点
- 以下回答来自chatgpt:
为了保存程序中的信息,可以使用文件或数据库来存储数据。以下是使用文件的解决方案:
-
首先,创建一个保存信息的数据结构,例如一个字典或者一个列表。这个数据结构应该能够容纳程序录入的所有信息。
-
在程序关闭前,将这个数据结构保存到文件中。可以将数据结构转换成字符串的形式,然后写入文件中。
-
在程序启动时,检查文件是否存在。如果存在,将文件中保存的数据读取出来,并将其还原为原始的数据结构。
以下是一个示例代码,展示如何使用文件来保存和读取信息:
import json # 创建保存信息的数据结构 information = { 'name': 'John', 'age': 25, 'email': 'john@example.com' } # 将数据保存到文件中 with open('information.txt', 'w') as file: json.dump(information, file) # 从文件中读取数据 with open('information.txt', 'r') as file: saved_information = json.load(file) print(saved_information) # 输出:{'name': 'John', 'age': 25, 'email': 'john@example.com'}
在上面的示例中,我们使用了
json
模块来将数据结构转换为字符串形式并保存到文件中。在从文件中读取数据时,我们使用json
模块将字符串转换回原始的数据结构。你可以根据需要调整数据结构的形式,使用其他的保存和读取数据的方法。 -
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^解决 无用评论 打赏 举报