要求用C语言编写:1.先编写一个带结构的文件,存入电脑,要求第一行从左到右的内容依次是:姓名、地址、学号,每排每列对齐,没有对齐的地方用空格补齐。2.从电脑中能够读入这个带结构的文件,并进行删增改后,重新存入电脑,3.这个文件要有纵横结构,每横表示一个记录4. 编出来的代码要能够在c的运行界面进行后续的插入、删除和修改
时间: 2024-03-10 09:51:24 浏览: 15
好的,我明白了。以下是用C语言编写的代码实现你的要求:
```c
#include <stdio.h>
#include <string.h>
#define MAX_NAME_LEN 20
#define MAX_ADDR_LEN 50
#define MAX_ID_LEN 10
#define MAX_RECORDS 100
// 定义记录结构体
typedef struct {
char name[MAX_NAME_LEN];
char addr[MAX_ADDR_LEN];
char id[MAX_ID_LEN];
} Record;
// 读取记录文件
int read_records(Record records[]) {
FILE *fp;
char filename[50];
int i = 0;
printf("请输入记录文件名:");
scanf("%s", filename);
fp = fopen(filename, "r");
if (fp == NULL) {
printf("打开文件失败!\n");
return 0;
}
// 逐行读取记录
while (fscanf(fp, "%s %s %s", records[i].name, records[i].addr, records[i].id) != EOF) {
i++;
}
fclose(fp);
return i; // 返回记录数
}
// 写入记录文件
void write_records(Record records[], int num_records) {
FILE *fp;
char filename[50];
printf("请输入记录文件名:");
scanf("%s", filename);
fp = fopen(filename, "w");
if (fp == NULL) {
printf("打开文件失败!\n");
return;
}
// 逐行写入记录
for (int i = 0; i < num_records; i++) {
fprintf(fp, "%-20s%-50s%-10s\n", records[i].name, records[i].addr, records[i].id);
}
fclose(fp);
}
// 显示记录列表
void show_records(Record records[], int num_records) {
printf("%-20s%-50s%-10s\n", "姓名", "地址", "学号");
printf("--------------------------------------------\n");
for (int i = 0; i < num_records; i++) {
printf("%-20s%-50s%-10s\n", records[i].name, records[i].addr, records[i].id);
}
}
// 插入记录
void insert_record(Record records[], int *num_records) {
if (*num_records >= MAX_RECORDS) {
printf("记录已满,无法插入!\n");
return;
}
Record new_record;
printf("请输入新记录的姓名、地址、学号:");
scanf("%s %s %s", new_record.name, new_record.addr, new_record.id);
records[*num_records] = new_record;
(*num_records)++;
}
// 删除记录
void delete_record(Record records[], int *num_records) {
char id[MAX_ID_LEN];
printf("请输入要删除的记录的学号:");
scanf("%s", id);
for (int i = 0; i < *num_records; i++) {
if (strcmp(records[i].id, id) == 0) {
// 找到要删除的记录,将后面的记录向前移动一位
for (int j = i; j < *num_records - 1; j++) {
records[j] = records[j + 1];
}
(*num_records)--;
printf("删除成功!\n");
return;
}
}
printf("未找到要删除的记录!\n");
}
// 修改记录
void modify_record(Record records[], int num_records) {
char id[MAX_ID_LEN];
printf("请输入要修改的记录的学号:");
scanf("%s", id);
for (int i = 0; i < num_records; i++) {
if (strcmp(records[i].id, id) == 0) {
// 找到要修改的记录,输入新的信息
printf("请输入新的姓名、地址、学号:");
scanf("%s %s %s", records[i].name, records[i].addr, records[i].id);
printf("修改成功!\n");
return;
}
}
printf("未找到要修改的记录!\n");
}
int main() {
Record records[MAX_RECORDS];
int num_records = 0;
// 读取记录文件
num_records = read_records(records);
// 显示菜单
while (1) {
printf("\n请选择操作:\n");
printf("1. 显示记录列表\n");
printf("2. 插入记录\n");
printf("3. 删除记录\n");
printf("4. 修改记录\n");
printf("5. 保存记录到文件\n");
printf("0. 退出程序\n");
printf("请输入操作编号:");
int choice;
scanf("%d", &choice);
switch (choice) {
case 1:
show_records(records, num_records);
break;
case 2:
insert_record(records, &num_records);
break;
case 3:
delete_record(records, &num_records);
break;
case 4:
modify_record(records, num_records);
break;
case 5:
write_records(records, num_records);
break;
case 0:
return 0;
default:
printf("无效的操作编号!\n");
break;
}
}
return 0;
}
```
这个程序实现了以下功能:
1. 从文件读取记录列表
2. 显示记录列表
3. 插入记录
4. 删除记录
5. 修改记录
6. 保存记录列表到文件
你可以在运行界面选择不同的操作来进行记录管理。注意,记录文件的格式必须符合要求,才能正常读取和写入。
相关推荐
![pptx](https://img-home.csdnimg.cn/images/20210720083543.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)