请帮我设计一个程序,要求如下:设计一个同学通讯录 系统设计说明: 创建通讯录:输入学生的姓名、学号和电话号码等,并将它们存放在对应的数组中,每输入一组,记录数加1; 显示通讯录:将记录学生姓名、学号和电话号码的数组中的数据一一输出到屏幕上,可以根据实际记录数确定循环次数; 查询通讯录:分别按学号和姓名进行查询,查询时将输入的信息通过与相应的数组成员一一进行比较; 修改通讯录:输入需要修改记录的学号,通过循环查找到该记录后,再输入新数据替代原有数据; 添加通讯录:判断输入的学号是否重复,若不重复再讲输入的信息添加到对应的数组中,每输入一组数据,记录数加1; 。数据保存功能, 退出
时间: 2023-05-13 13:04:29 浏览: 227
同学通讯录管理程序(内附设计报告)
以下是一个简单的同学通讯录系统的程序设计:
```
#include <stdio.h>
#include <string.h>
#define MAX_RECORDS 100
struct student {
char name[20];
char id[10];
char phone[15];
};
struct student records[MAX_RECORDS];
int num_records = 0;
void create_record() {
struct student s;
printf("请输入学生姓名:");
scanf("%s", s.name);
printf("请输入学生学号:");
scanf("%s", s.id);
printf("请输入学生电话号码:");
scanf("%s", s.phone);
records[num_records++] = s;
printf("记录已添加。\n");
}
void display_records() {
printf("姓名\t学号\t电话号码\n");
for (int i = 0; i < num_records; i++) {
printf("%s\t%s\t%s\n", records[i].name, records[i].id, records[i].phone);
}
}
void search_record() {
char keyword[20];
printf("请输入要查询的关键字:");
scanf("%s", keyword);
printf("查询结果:\n");
printf("姓名\t学号\t电话号码\n");
for (int i = 0; i < num_records; i++) {
if (strcmp(records[i].name, keyword) == 0 || strcmp(records[i].id, keyword) == 0) {
printf("%s\t%s\t%s\n", records[i].name, records[i].id, records[i].phone);
}
}
}
void modify_record() {
char id[10];
printf("请输入要修改的学生学号:");
scanf("%s", id);
for (int i = 0; i < num_records; i++) {
if (strcmp(records[i].id, id) == 0) {
printf("请输入新的学生姓名:");
scanf("%s", records[i].name);
printf("请输入新的学生电话号码:");
scanf("%s", records[i].phone);
printf("记录已修改。\n");
return;
}
}
printf("未找到该学生记录。\n");
}
void add_record() {
struct student s;
printf("请输入学生姓名:");
scanf("%s", s.name);
printf("请输入学生学号:");
scanf("%s", s.id);
printf("请输入学生电话号码:");
scanf("%s", s.phone);
for (int i = 0; i < num_records; i++) {
if (strcmp(records[i].id, s.id) == 0) {
printf("该学号已存在,请重新输入。\n");
return;
}
}
records[num_records++] = s;
printf("记录已添加。\n");
}
void save_records() {
FILE *fp = fopen("records.txt", "w");
if (fp == NULL) {
printf("无法打开文件。\n");
return;
}
for (int i = 0; i < num_records; i++) {
fprintf(fp, "%s %s %s\n", records[i].name, records[i].id, records[i].phone);
}
fclose(fp);
printf("记录已保存。\n");
}
int main() {
int choice;
while (1) {
printf("请选择操作:\n");
printf("1. 创建通讯录\n");
printf("2. 显示通讯录\n");
printf("3. 查询通讯录\n");
printf("4. 修改通讯录\n");
printf("5. 添加通讯录\n");
printf("6. 保存记录\n");
printf("7. 退出程序\n");
printf("请输入操作编号:");
scanf("%d", &choice);
switch (choice) {
case 1:
create_record();
break;
case 2:
display_records();
break;
case 3:
search_record();
break;
case 4:
modify_record();
break;
case 5:
add_record();
break;
case 6:
save_records();
break;
case 7:
return 0;
default:
printf("无效的操作编号,请重新输入。\n");
}
}
}
```
这个程序使用了一个结构体 `student` 来存储每个学生的姓名、学号和电话号码,使用一个数组 `records` 来存储所有的记录,使用一个变量 `num_records` 来记录当前记录数。程序提供了以下操作:
1. 创建通讯录:输入学生的姓名、学号和电话号码等,并将它们存放在对应的数组中,每输入一组,记录数加1;
2. 显示通讯录:将记录学生姓名、学号和电话号码的数组中的数据一一输出到屏幕上,可以根据实际记录数确定循环次数;
3. 查询通讯录:分别按学号和姓名进行查询,查询时将输入的信息通过与相应的数组成员一一进行比较;
4. 修改通讯录:输入需要修改记录的学号,通过循环查找到该记录后,再输入新数据替代原有数据;
5. 添加通讯录:判断输入的学号是否重复,若不重复再讲输入的信息添加到对应的数组中,每输入一组数据,记录数加1;
6. 数据保存功能;
7. 退出程序。
注意,这个程序没有进行输入的合法性检查,例如输入的学号和电话号码是否符合格式要求,需要根据实际情况进行修改。
阅读全文