请给我一个用C语言编写的完程序,要求: 1.先编写一个带结构的文件,存入电脑,要求第一行从左到右的内容依次是:序号、姓名、地址、学号,每排每列对齐,没有对齐的地方用空格补齐。 2.从电脑中能够读入这个带结构的文件,并进行删增改后,重新存入电脑, 3.这个文件要有纵横结构,每横表示一个记录 4. 编出来的代码要能够在c的运行界面进行后续的插入、删除和修改, 其中学生信息存储在students.dat文件中 能在文件中第一行显示姓名、地址、学号,并且修改后能够自动保存。printf打印的部分要用中文
时间: 2024-03-11 16:43:50 浏览: 53
C语言程序设计课件:9 文件.ppt
好的,下面是一个简单的C语言程序,可以实现你的要求:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Student {
int id;
char name[20];
char address[50];
char number[20];
};
void print_student_header() {
printf("%-5s%-20s%-50s%-20s\n", "序号", "姓名", "地址", "学号");
}
void print_student(struct Student s) {
printf("%-5d%-20s%-50s%-20s\n", s.id, s.name, s.address, s.number);
}
void read_students(struct Student students[], int *count) {
FILE *fp = fopen("students.dat", "rb");
if (fp == NULL) {
printf("无法打开文件!");
exit(1);
}
*count = 0;
while (fread(&students[*count], sizeof(struct Student), 1, fp) == 1) {
(*count)++;
}
fclose(fp);
}
void write_students(struct Student students[], int count) {
FILE *fp = fopen("students.dat", "wb");
if (fp == NULL) {
printf("无法打开文件!");
exit(1);
}
for (int i = 0; i < count; i++) {
fwrite(&students[i], sizeof(struct Student), 1, fp);
}
fclose(fp);
}
void insert_student(struct Student students[], int *count) {
struct Student s;
printf("请输入学生信息:\n");
printf("序号:");
scanf("%d", &s.id);
printf("姓名:");
scanf("%s", s.name);
printf("地址:");
scanf("%s", s.address);
printf("学号:");
scanf("%s", s.number);
students[*count] = s;
(*count)++;
}
void delete_student(struct Student students[], int *count) {
int id;
printf("请输入要删除的学生序号:");
scanf("%d", &id);
for (int i = 0; i < *count; i++) {
if (students[i].id == id) {
for (int j = i; j < *count - 1; j++) {
students[j] = students[j + 1];
}
(*count)--;
break;
}
}
}
void modify_student(struct Student students[], int count) {
int id;
printf("请输入要修改的学生序号:");
scanf("%d", &id);
for (int i = 0; i < count; i++) {
if (students[i].id == id) {
printf("请输入新的学生信息:\n");
printf("姓名:");
scanf("%s", students[i].name);
printf("地址:");
scanf("%s", students[i].address);
printf("学号:");
scanf("%s", students[i].number);
break;
}
}
}
int main() {
struct Student students[100];
int count = 0;
read_students(students, &count);
print_student_header();
for (int i = 0; i < count; i++) {
print_student(students[i]);
}
int choice;
do {
printf("请选择操作:\n");
printf("1. 插入学生信息\n");
printf("2. 删除学生信息\n");
printf("3. 修改学生信息\n");
printf("4. 退出系统\n");
scanf("%d", &choice);
switch (choice) {
case 1:
insert_student(students, &count);
print_student_header();
for (int i = 0; i < count; i++) {
print_student(students[i]);
}
write_students(students, count);
break;
case 2:
delete_student(students, &count);
print_student_header();
for (int i = 0; i < count; i++) {
print_student(students[i]);
}
write_students(students, count);
break;
case 3:
modify_student(students, count);
print_student_header();
for (int i = 0; i < count; i++) {
print_student(students[i]);
}
write_students(students, count);
break;
case 4:
break;
default:
printf("无效操作,请重新选择!\n");
break;
}
} while (choice != 4);
return 0;
}
```
这个程序首先会读取students.dat文件中的学生信息,并把它们打印到屏幕上。然后,它会显示一个菜单,让用户可以选择插入、删除或修改学生信息。每次用户进行操作后,都会重新打印学生信息,并把修改后的结果保存到文件中。
请注意,这个程序还有很多需要改进的地方。例如,它可以添加输入校验和错误处理来提高程序的健壮性。此外,它还可以使用动态内存分配来处理更多的学生信息。
阅读全文