#include <stdio.h>
#include <windows.h>
#include <conio.h>
#include <string.h>
struct Student
{
char id[14];
char name[10];
char age[4];
char sex[4];
char date[16];
char address[20];
char phone[12];
char email[20];
};
struct Student stu[50],ss;
void menu();
int searchID(Student stu[], int count, char* keyID);
//功能:在stu的count个元素,查找ss
//返回值:查找成功,返回ss在stu中的位置号;否则,返回 -1
int searchNAME(Student stu[], int count, char* keyNAME);
int searchPHONE(Student stu[], int count, char* keyPHONE);
int searchEMAIL(Student stu[], int count, char* keyEMAIL);
int search(Student stu[], int count, Student ss);
//正常插入,返回学生数;否则,返回-1
int add(Student stu[] , int count ,Student ss);
//若输入的学号存在,正常修改,返回学生数,否则,修改失败,返回 -1
int modify(Student stu[],int count,Student ss);
//若输入的学号存在,删除,返回学生数,否则,删除失败,返回 -1
int Delete(Student stu[],int count,Student ss);
void writeFile(Student stu[] , int count );
int readFile(Student stu[]);
int main()
{
char keyID[20],keyNAME[10],keyPHONE[12],keyEMAIL[20];
int count = 0, i;
int select, select1,tag = 1 ;
count = readFile(stu);
while(tag)
{
//菜单
menu();
scanf("%d",&select);
switch(select)
{
case 1://增加
printf("请输入待插入的学生\n学号 姓名 年龄 性别 出生年月 地址 电话 E-mail\n");
scanf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", ss.id , ss.name ,&ss.age, ss.sex ,ss.date,ss.address,ss.phone,ss.email);
i = add(stu,count,ss);
//如果本来不存在这个学生信息
if(i != -1)
{
printf("插入成功\n");
count = i;
}
else
printf("录入失败\n");
break;
case 2://按学号查找
printf("请输入学号关键字:");
scanf("%s", keyID);
i = searchID(stu, count, keyID); //i = searchID(stu, count, key); 修改
if (i != -1)
{
printf("待查找的学生\n学号 姓名 年龄 性别 出生年月 地址 电话 E-mail\n");
printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", stu[i].id, stu[i].name, stu[i].age, stu[i].sex, stu[i].date, stu[i].address, stu[i].phone, stu[i].email);
}
else
printf("%s不存在!\n",keyID);
break;
case 3://按姓名查找
printf("请输入姓名关键字:");
scanf("%s", keyNAME);
i = searchNAME(stu , count ,keyNAME);
if(i != -1 ){
printf("待查找的学生\n学号 姓名 年龄 性别 出生年月 地址 电话 E-mail\n");
printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",stu[i].id , stu[i].name , stu[i].age,stu[i].sex,stu[i].date,stu[i].address,stu[i].phone,stu[i].email);
}
else
printf("%s不存在!\n",keyNAME);
break;
case 4:
printf("请输入电话关键字:");
scanf("%s", keyPHONE);
i = searchPHONE(stu , count ,keyPHONE);
if(i != -1 ){
printf("待查找的学生\n学号 姓名 年龄 性别 出生年月 地址 电话 E-mail\n");
printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",stu[i].id , stu[i].name , stu[i].age,stu[i].sex,stu[i].date,stu[i].address,stu[i].phone,stu[i].email);
}
else
printf("%s不存在!\n",keyPHONE);
break;
case 5:
printf("请输入电子邮箱关键字:");
scanf("%s", keyEMAIL);
i = searchEMAIL(stu , count ,keyEMAIL);
if(i != -1 ){
printf("待查找的学生\n学号 姓名 年龄 性别 出生年月 地址 电话 E-mail\n");
printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",stu[i].id , stu[i].name , stu[i].age,stu[i].sex,stu[i].date,stu[i].address,stu[i].phone,stu[i].email);
}
else
printf("%s不存在!\n",keyEMAIL);
break;
case 6://修改
printf("请输入待修改的学生\n学号\n");
scanf("%s", ss.id );
i = modify(stu , count ,ss);
if(i == -1)
printf("%s 不存在,修改失败!\n",ss.id);
else{
search(stu,count,ss);
printf("请选择需要修改的信息\n1.学号 2.姓名 3.年龄 4.性别 5.出生日期 6.地址 7.电话 8.电子邮箱");
printf("修改成功\n");
}
break;
case 7://删除
printf("请输入待删除的学生学号:");
scanf("%s", ss.id);
i = Delete(stu , count ,ss);
if(i != -1 )
{
printf("删除成功\n");
count = i;
}
else
printf("%s 不存在,删除失败\n",ss.id);
break;
case 8://显示
printf("学号 姓名 年龄 性别 出生年月 地址 电话 E-mail\n");
for(i = 0 ; i < count ; i++ )
printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",stu[i].id , stu[i].name , stu[i].age,stu[i].sex,stu[i].date,stu[i].address,stu[i].phone,stu[i].email);
break;
case 0:
system("cls") ;
printf("欢迎再次使用学生信息管理系统......\n");
tag = 0 ;
writeFile(stu ,count );
break;
default:
printf("选择错误,只能选择(0-8)");
}
printf("按任意键继续......\n");
getch();
system("cls");
}
getch();
return 0;
}
void menu()
{
printf(" *学生信息管理系统* \n");
printf("1、录入学生信息\n");
printf("2、查找学生信息(按学号)\n");
printf("3、查找学生信息(按姓名)\n");
printf("4、查找学生信息(按电话)\n");
printf("5、查找学生信息(按电子邮箱)\n");
printf("6、修改学生信息\n");
printf("7、删除学生信息\n");
printf("8、显示学生信息\n");
printf("0、退出系统\n");
printf("__________________________\n");
printf("请选择(0-8):");
}
int searchID(Student stu[], int count, char* keyID) //int searchID(Student stu[], int count, char key) 修改
{
int i;
char* p = NULL;
for (i = 0; i < count; i++) //先排查 学号
{
p = strstr(stu[i].id, keyID);
if (p) return i;
}
return -1;
}
int searchNAME(Student stu[], int count, char* keyNAME) //int searchID(Student stu[], int count, char key) 修改
{
int i;
char* p = NULL;
for (i = 0; i < count; i++) //先排查 学号
{
p = strstr(stu[i].name, keyNAME);
if (p) return i;
}
return -1;
}
int searchPHONE(Student stu[], int count, char* keyPHONE) //int searchID(Student stu[], int count, char key) 修改
{
int i;
char* p = NULL;
for (i = 0; i < count; i++) //先排查 学号
{
p = strstr(stu[i].phone, keyPHONE);
if (p) return i;
}
return -1;
}
int searchEMAIL(Student stu[], int count, char* keyEMAIL) //int searchID(Student stu[], int count, char key) 修改
{
int i;
char* p = NULL;
for (i = 0; i < count; i++) //先排查 学号
{
p = strstr(stu[i].email, keyEMAIL);
if (p) return i;
}
return -1;
}
int search(Student stu[], int count, Student ss)
{
int i;
for (i = 0; i < count; i++)
if (strcmp(stu[i].name, ss.id) == 0) return i;
return -1;
}
//功能:在stu的count个元素,查找ss
//返回值:查找成功,返回ss在stu中的位置号;否则,返回 -1
int add(Student stu[] , int count ,Student ss)
{
int pos ;
//先判断添加的信息是否原本已有这个学生
pos = searchID(stu, count, ss.id);
//如果本来不存在,就添加
if(pos == -1)
{
stu[count] = ss;
return count + 1;
}
return -1;
}
//若输入的学号存在,正常修改,返回学生数,否则,修改失败,返回 -1
int modify(Student stu[],int count,Student ss)
{
int pos,select1 ;
char id[14],name[10],age[4],sex[4],date[16],address[20],phone[12],email[20];
pos = searchID(stu, count, ss.id);
if(pos == -1)
return -1;
else
{
scanf("%d",&select1);
switch(select1){
case 1:
scanf("%s",id);
stu[pos].id=id;
case 2:
scanf("%s",name);
stu[pos].name=name;
case 3:
scanf("%s",age);
stu[pos].age=age;
case 4:
scanf("%s",sex);
stu[pos].sex=sex;
case 5:
scanf("%s",date);
stu[pos].date=date;
case 6:
scanf("%s",address);
stu[pos].address=address;
case 7:
scanf("%s",phone);
stu[pos].phone=phone;
case 8:
scanf("%s",email);
stu[pos].email=email;
}
return count;
}
}
//若输入的学号存在,删除,返回学生数,否则,删除失败,返回 -1
int Delete(Student stu[],int count,Student ss)
{
int pos , i;
pos =searchID(stu, count, ss.id);
if(pos == -1)
return -1;
else
{
for(i = pos + 1 ; i < count ; i++ )
stu[i - 1 ] = stu[i] ;
return count - 1;
}
}
void writeFile(Student stu[],int count )
{
FILE *fp ;
int i;
//"w"是写文件
fp = fopen ("student.txt" , "w");
for(i = 0 ; i < count ;i++)
//fprinf()是把文件内容输出到屏幕
fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",stu[i].id , stu[i].name , stu[i].age,stu[i].sex,stu[i].date,stu[i].address,stu[i].phone,stu[i].email);
fclose(fp);
}
//只读文件
int readFile(Student stu[])
{
FILE *fp ;
int i;
fp = fopen ("student.txt" , "r");
//如果文件不存在,返回0
if(fp == NULL)
return 0;
//foef()判断文件是否结束,结束返回1,未结束返回0,用!feof()作为循环条件
//fscanf()将文件中的数据读入数组变量id,name...中
for(i = 0 ;; i++)
if (fscanf(fp , "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s" ,stu[i].id , stu[i].name , &stu[i].age,stu[i].sex,stu[i].date,stu[i].address,stu[i].phone,stu[i].email)!=8) break;
fclose(fp);
return i;
}
请问这个C语言代码怎样修改
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- qzjhjxj 2023-02-08 16:29关注
修改如下,供参考:
#include <stdio.h> #include <windows.h> #include <conio.h> #include <string.h> struct Student { char id[14]; char name[10]; char age[4]; char sex[4]; char date[16]; char address[20]; char phone[12]; char email[20]; }; struct Student stu[50], ss; void menu(); int searchID(Student stu[], int count, char* keyID); //功能:在stu的count个元素,查找ss //返回值:查找成功,返回ss在stu中的位置号;否则,返回 -1 int searchNAME(Student stu[], int count, char* keyNAME); int searchPHONE(Student stu[], int count, char* keyPHONE); int searchEMAIL(Student stu[], int count, char* keyEMAIL); int search(Student stu[], int count, Student ss); //正常插入,返回学生数;否则,返回-1 int add(Student stu[], int count, Student ss); //若输入的学号存在,正常修改,返回学生数,否则,修改失败,返回 -1 int modify(Student stu[], int count, Student ss); //若输入的学号存在,删除,返回学生数,否则,删除失败,返回 -1 int Delete(Student stu[], int count, Student ss); void writeFile(Student stu[], int count); int readFile(Student stu[]); int main() { char keyID[20], keyNAME[10], keyPHONE[12], keyEMAIL[20]; int count = 0, i; int select, select1, tag = 1; count = readFile(stu); while (tag) { //菜单 menu(); scanf("%d", &select); switch (select) { case 1://增加 printf("请输入待插入的学生\n学号 姓名 年龄 性别 出生年月 地址 电话 E-mail\n"); scanf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", ss.id, ss.name, &ss.age, ss.sex, ss.date, ss.address, ss.phone, ss.email); i = add(stu, count, ss); //如果本来不存在这个学生信息 if (i != -1) { printf("插入成功\n"); count = i; } else printf("录入失败\n"); break; case 2://按学号查找 printf("请输入学号关键字:"); scanf("%s", keyID); i = searchID(stu, count, keyID); //i = searchID(stu, count, key); 修改 if (i != -1) { printf("待查找的学生\n学号 姓名 年龄 性别 出生年月 地址 电话 E-mail\n"); printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", stu[i].id, stu[i].name, stu[i].age, stu[i].sex, stu[i].date, stu[i].address, stu[i].phone, stu[i].email); } else printf("%s不存在!\n", keyID); break; case 3://按姓名查找 printf("请输入姓名关键字:"); scanf("%s", keyNAME); i = searchNAME(stu, count, keyNAME); if (i != -1) { printf("待查找的学生\n学号 姓名 年龄 性别 出生年月 地址 电话 E-mail\n"); printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", stu[i].id, stu[i].name, stu[i].age, stu[i].sex, stu[i].date, stu[i].address, stu[i].phone, stu[i].email); } else printf("%s不存在!\n", keyNAME); break; case 4: printf("请输入电话关键字:"); scanf("%s", keyPHONE); i = searchPHONE(stu, count, keyPHONE); if (i != -1) { printf("待查找的学生\n学号 姓名 年龄 性别 出生年月 地址 电话 E-mail\n"); printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", stu[i].id, stu[i].name, stu[i].age, stu[i].sex, stu[i].date, stu[i].address, stu[i].phone, stu[i].email); } else printf("%s不存在!\n", keyPHONE); break; case 5: printf("请输入电子邮箱关键字:"); scanf("%s", keyEMAIL); i = searchEMAIL(stu, count, keyEMAIL); if (i != -1) { printf("待查找的学生\n学号 姓名 年龄 性别 出生年月 地址 电话 E-mail\n"); printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", stu[i].id, stu[i].name, stu[i].age, stu[i].sex, stu[i].date, stu[i].address, stu[i].phone, stu[i].email); } else printf("%s不存在!\n", keyEMAIL); break; case 6://修改 printf("请输入待修改的学生\n学号"); scanf("%s", ss.id); i = search(stu, count, ss); if (i == -1) printf("%s 不存在,修改失败!\n", ss.id); else { //printf("请选择需要修改的信息\n1.学号 2.姓名 3.年龄 4.性别 5.出生日期 6.地址 7.电话 8.电子邮箱"); i = modify(stu, count, ss); printf("修改成功\n"); } break; case 7://删除 printf("请输入待删除的学生学号:"); scanf("%s", ss.id); i = Delete(stu, count, ss); if (i != -1) { printf("删除成功\n"); count = i; } else printf("%s 不存在,删除失败\n", ss.id); break; case 8://显示 printf("学号 姓名 年龄 性别 出生年月 地址 电话 E-mail\n"); for (i = 0; i < count; i++) printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", stu[i].id, stu[i].name, stu[i].age, stu[i].sex, stu[i].date, stu[i].address, stu[i].phone, stu[i].email); break; case 0: system("cls"); printf("欢迎再次使用学生信息管理系统......\n"); tag = 0; writeFile(stu, count); break; default: printf("选择错误,只能选择(0-8)"); } printf("按任意键继续......\n"); getch(); system("cls"); } getch(); return 0; } void menu() { printf(" *学生信息管理系统* \n"); printf("1、录入学生信息\n"); printf("2、查找学生信息(按学号)\n"); printf("3、查找学生信息(按姓名)\n"); printf("4、查找学生信息(按电话)\n"); printf("5、查找学生信息(按电子邮箱)\n"); printf("6、修改学生信息\n"); printf("7、删除学生信息\n"); printf("8、显示学生信息\n"); printf("0、退出系统\n"); printf("__________________________\n"); printf("请选择(0-8):"); } int searchID(Student stu[], int count, char* keyID) //int searchID(Student stu[], int count, char key) 修改 { int i; char* p = NULL; for (i = 0; i < count; i++) //先排查 学号 { p = strstr(stu[i].id, keyID); if (p) return i; } return -1; } int searchNAME(Student stu[], int count, char* keyNAME) //int searchID(Student stu[], int count, char key) 修改 { int i; char* p = NULL; for (i = 0; i < count; i++) //先排查 学号 { p = strstr(stu[i].name, keyNAME); if (p) return i; } return -1; } int searchPHONE(Student stu[], int count, char* keyPHONE) //int searchID(Student stu[], int count, char key) 修改 { int i; char* p = NULL; for (i = 0; i < count; i++) //先排查 学号 { p = strstr(stu[i].phone, keyPHONE); if (p) return i; } return -1; } int searchEMAIL(Student stu[], int count, char* keyEMAIL) //int searchID(Student stu[], int count, char key) 修改 { int i; char* p = NULL; for (i = 0; i < count; i++) //先排查 学号 { p = strstr(stu[i].email, keyEMAIL); if (p) return i; } return -1; } int search(Student stu[], int count, Student ss) { int i; for (i = 0; i < count; i++) if (strcmp(stu[i].id, ss.id) == 0) return i; //if (strcmp(stu[i].name, ss.id) == 0) 修改 return -1; } //功能:在stu的count个元素,查找ss //返回值:查找成功,返回ss在stu中的位置号;否则,返回 -1 int add(Student stu[], int count, Student ss) { int pos; //先判断添加的信息是否原本已有这个学生 pos = searchID(stu, count, ss.id); //如果本来不存在,就添加 if (pos == -1) { stu[count] = ss; return count + 1; } return -1; } //若输入的学号存在,正常修改,返回学生数,否则,修改失败,返回 -1 int modify(Student stu[], int count, Student ss) { int pos, select1; char id[14], name[10], age[4], sex[4], date[16], address[20], phone[12], email[20]; pos = searchID(stu, count, ss.id); if (pos == -1) return -1; else { printf("请选择需要修改的信息\n1.学号 2.姓名 3.年龄 4.性别 5.出生日期 6.地址 7.电话 8.电子邮箱"); scanf("%d", &select1); switch (select1) { case 1: printf("请输入新的学号:"); scanf("%s", id); strcpy(stu[pos].id, id); //stu[pos].id = id; 修改 break; //修改 case 2: printf("请输入新的姓名:"); scanf("%s", name); strcpy(stu[pos].name, name);//stu[pos].name = name; 修改 break; //修改 case 3: printf("请输入新的年龄:"); scanf("%s", age); strcpy(stu[pos].age, age); //stu[pos].age = age; 修改 break; //修改 case 4: printf("请输入新的性别:"); scanf("%s", sex); strcpy(stu[pos].sex, sex); //stu[pos].sex = sex; 修改 break; //修改 case 5: printf("请输入新的生日:"); scanf("%s", date); strcpy(stu[pos].date, date); //stu[pos].date = date; 修改 break; //修改 case 6: printf("请输入新的地址:"); scanf("%s", address); strcpy(stu[pos].address, address);//stu[pos].address = address; 修改 break; //修改 case 7: printf("请输入新的电话:"); scanf("%s", phone); strcpy(stu[pos].phone, phone); //stu[pos].phone = phone; 修改 break; //修改 case 8: printf("请输入新的邮箱:"); scanf("%s", email); strcpy(stu[pos].email, email); //stu[pos].email = email; 修改 break; //修改 default: break; //修改 } return count; } } //若输入的学号存在,删除,返回学生数,否则,删除失败,返回 -1 int Delete(Student stu[], int count, Student ss) { int pos, i; pos = searchID(stu, count, ss.id); if (pos == -1) return -1; else { for (i = pos + 1; i < count; i++) stu[i - 1] = stu[i]; return count - 1; } } void writeFile(Student stu[], int count) { FILE* fp; int i; //"w"是写文件 fp = fopen("student.txt", "w"); for (i = 0; i < count; i++) //fprinf()是把文件内容输出到屏幕 fprintf(fp, "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", stu[i].id, stu[i].name, stu[i].age, stu[i].sex, stu[i].date, stu[i].address, stu[i].phone, stu[i].email); fclose(fp); } //只读文件 int readFile(Student stu[]) { FILE* fp; int i; fp = fopen("student.txt", "r"); //如果文件不存在,返回0 if (fp == NULL) return 0; //foef()判断文件是否结束,结束返回1,未结束返回0,用!feof()作为循环条件 //fscanf()将文件中的数据读入数组变量id,name...中 for (i = 0;; i++) if (fscanf(fp, "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s", stu[i].id, stu[i].name, &stu[i].age, stu[i].sex, stu[i].date, stu[i].address, stu[i].phone, stu[i].email) != 8) break; fclose(fp); return i; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 微信小程序 用oss下载 aliyun-oss-sdk-6.18.0.min client报错
- ¥15 ArcGIS批量裁剪
- ¥15 labview程序设计
- ¥15 为什么在配置Linux系统的时候执行脚本总是出现E: Failed to fetch http:L/cn.archive.ubuntu.com
- ¥15 Cloudreve保存用户组存储空间大小时报错
- ¥15 伪标签为什么不能作为弱监督语义分割的结果?
- ¥15 编一个判断一个区间范围内的数字的个位数的立方和是否等于其本身的程序在输入第1组数据后卡住了(语言-c语言)
- ¥15 Mac版Fiddler Everywhere4.0.1提示强制更新
- ¥15 android 集成sentry上报时报错。
- ¥15 抖音看过的视频,缓存在哪个文件