谁能帮我设计一下啊,明天上午就要用,用结构体数组跟文件设计,快来帮助我啊
4条回答 默认 最新
- qfl_sdu 2022-12-17 10:14关注
根据你的要求写的。
代码:
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct _student { char id[10]; //学号 char name[20];//姓名 char sex[4];//性别 男、女 char major[20];//专业 int cla; //班级 int romeid;//宿舍号 char addr[20];//籍贯 char phone[12];//手机号 char qq[10]; //qq char vx[18]; //vx }Student; const char* filename = "student.txt"; //数据文件 //8.从文件读取结构体数据 int initFromFile(Student stu[]) { FILE* fp = 0; int n = 0; fp = fopen(filename, "r"); if (fp == 0) { printf("文件读取失败\n"); return 0; } while (!feof(fp)) { if (fscanf(fp, "%s %s %s %s %d %d %s %s %s %s", stu[n].id,stu[n].name,stu[n].sex,stu[n].major,&stu[n].cla,&stu[n].romeid,stu[n].addr,stu[n].phone,stu[n].qq,stu[n].vx)==10) n++; } fclose(fp); return n; } //7.写入文件 void write2file(Student stu[], int n) { int i = 0; FILE* fp = fopen(filename, "w"); for (i = 0; i < n; i++) fprintf(fp, "%s %s %s %s %d %d %s %s %s %s\n", stu[i].id, stu[i].name, stu[i].sex, stu[i].major, stu[i].cla, stu[i].romeid, stu[i].addr, stu[i].phone, stu[i].qq, stu[i].vx); fclose(fp); printf("数据写入文件完成!\n"); } //1.添加联系人 int add(Student stu[], int n) { int op = 1; while (op) { printf("请输入学号:"); scanf("%s", stu[n].id); printf("请输入姓名:"); scanf("%s", stu[n].name); printf("请输入性别:"); scanf("%s", stu[n].sex); printf("请输入专业:"); scanf("%s", stu[n].major); printf("请输入班级:"); scanf("%d", &stu[n].cla); printf("请输入宿舍号:"); scanf("%d", &stu[n].romeid); printf("请输入籍贯:"); scanf("%s", stu[n].addr); printf("请输入手机号:"); scanf("%s", stu[n].phone); printf("请输入QQ号:"); scanf("%s", stu[n].qq); printf("请输入微信号:"); scanf("%s", stu[n].vx); n++; printf("是否继续添加:(1.是 0.否) "); scanf("%d", &op); } return n; } //2.查询 void search(Student stu[], int n) { char tmp[20]; int i; int flag = 0; printf("请输入姓名或者学号或者手机号或者微信号或者qq号:"); //根据其中的任何一个查询 scanf("%s", tmp); for (i = 0; i < n; i++) { if (strcmp(stu[i].id, tmp) == 0 || strcmp(stu[i].name, tmp) == 0 || strcmp(stu[i].phone, tmp) == 0 || strcmp(stu[i].qq, tmp) == 0 || strcmp(stu[i].vx, tmp) == 0) { flag = 1; printf("%s %s %s %s %d %d %s %s %s %s\n", stu[i].id, stu[i].name, stu[i].sex, stu[i].major, stu[i].cla, stu[i].romeid, stu[i].addr, stu[i].phone, stu[i].qq, stu[i].vx); } } if (flag == 0) printf("查无此人\n"); return ; } //3.删除联系人 int del(Student stu[], int n) { char tmp[20]; int i, j; int flag = 0; int op; printf("请输入学号或者手机号或者微信号或者qq号:"); //要求学号、手机号、微信号和QQ必须唯一 scanf("%s", tmp); for (i = 0; i < n; i++) { if (strcmp(stu[i].id, tmp) == 0 || strcmp(stu[i].phone, tmp) == 0 || strcmp(stu[i].qq, tmp) == 0 || strcmp(stu[i].vx, tmp) == 0) { flag = 1; printf("查询到的人员信息为:\n"); printf("%s %s %s %s %d %d %s %s %s %s\n", stu[i].id, stu[i].name, stu[i].sex, stu[i].major, stu[i].cla, stu[i].romeid, stu[i].addr, stu[i].phone, stu[i].qq, stu[i].vx); printf("是否确认删除:(1.是 0.否) "); scanf("%d", &op); if (op == 1) { for (j = i; j < n - 1; j++) stu[j] = stu[j + 1]; n -= 1; return n; } } } if (flag == 0) printf("查无此人\n"); return n; } //4.修改联系人信息 void mod(Student stu[], int n) { char tmp[20]; int i, j; int flag = 0; int op; printf("请输入学号或者手机号或者微信号或者qq号:"); //要求学号、手机号、微信号和QQ必须唯一 scanf("%s", tmp); for (i = 0; i < n; i++) { if (strcmp(stu[i].id, tmp) == 0 || strcmp(stu[i].phone, tmp) == 0 || strcmp(stu[i].qq, tmp) == 0 || strcmp(stu[i].vx, tmp) == 0) { flag = 1; printf("查询到的人员信息为:\n"); printf("%s %s %s %s %d %d %s %s %s %s\n", stu[i].id, stu[i].name, stu[i].sex, stu[i].major, stu[i].cla, stu[i].romeid, stu[i].addr, stu[i].phone, stu[i].qq, stu[i].vx); printf("是否确认修改:(1.是 0.否) "); scanf("%d", &op); if (op == 1) { printf("请输入学号:"); scanf("%s", stu[i].id); printf("请输入姓名:"); scanf("%s", stu[i].name); printf("请输入性别:"); scanf("%s", stu[i].sex); printf("请输入专业:"); scanf("%s", stu[i].major); printf("请输入班级:"); scanf("%d", &stu[i].cla); printf("请输入宿舍号:"); scanf("%d", &stu[i].romeid); printf("请输入籍贯:"); scanf("%s", stu[i].addr); printf("请输入手机号:"); scanf("%s", stu[i].phone); printf("请输入QQ号:"); scanf("%s", stu[i].qq); printf("请输入微信号:"); scanf("%s", stu[i].vx); printf("修改成功\n"); return ; } } } if (flag == 0) printf("查无此人\n"); } //5.输出列表 void show(Student stu[], int n) { int i = 0; printf("联系人信息列表:\n"); for(;i<n;i++) printf("%s %s %s %s %d %d %s %s %s %s\n", stu[i].id, stu[i].name, stu[i].sex, stu[i].major, stu[i].cla, stu[i].romeid, stu[i].addr, stu[i].phone, stu[i].qq, stu[i].vx); } //6.按学号排序 void sortById(Student stu[], int n) { int i, j; Student t; for (i = 0; i < n - 1; i++) { for (j = 0; j < n - 1 - i; j++) { if (strcmp(stu[j].id, stu[j + 1].id) > 0) //根据学号从小到大排序 { t = stu[j]; stu[j] = stu[j+1]; stu[j + 1] = t; } } } printf("排序完成,排序后:\n"); show(stu, n); } int main() { int op = 1; Student stu[100]; int n = 0; n = initFromFile(stu); //初始化,将外存数据文件读入程序 while (op != 7) { system("cls"); //清屏 printf("------------------------------------------\n"); printf(" 个人通讯录管理系统 \n"); 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("------------------------------------------\n"); printf("请选择:"); scanf("%d", &op); switch (op) { case 1:n = add(stu, n); break; case 2:search(stu, n); break; case 3:n = del(stu, n); break; case 4:mod(stu, n); break; case 5:show(stu, n); break; case 6:sortById(stu, n); break; case 7:write2file(stu, n); break; } system("pause"); } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 3无用
悬赏问题
- ¥15 如何解决ldsc的这条报错/index error
- ¥15 VS2022+WDK驱动开发环境
- ¥30 关于#java#的问题,请各位专家解答!
- ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分合并
- ¥20 pcf8563时钟芯片不启振
- ¥20 pip2.40更新pip2.43时报错
- ¥15 换yum源但仍然用不了httpd
- ¥50 C# 使用DEVMOD设置打印机首选项
- ¥15 麒麟V10 arm安装gdal
- ¥20 OPENVPN连接问题