请帮我设计一个程序,要求如下:设计一个同学通讯录 系统设计说明: 创建通讯录:输入学生的姓名、学号和电话号码等,并将它们存放在对应的数组中,每输入一组,记录数加1; 显示通讯录:将记录学生姓名、学号和电话号码的数组中的数据一一输出到屏幕上,可以根据实际记录数确定循环次数;; 添加通讯录:判断输入的学号是否重复,若不重复再讲输入的信息添加到对应的数组中,每输入一组数据,记录数加1; 删除通讯录:分别按学号和姓名进行删除; 排序通讯录:分别按学号和姓名进行排序。数据保存功能, 退出
时间: 2023-05-16 11:05:08 浏览: 115
学生通讯录管理系统
5星 · 资源好评率100%
以下是一个简单的同学通讯录系统的程序设计:
```
#include <stdio.h>
#include <string.h>
#define MAX_RECORDS 100
struct Student {
char name[20];
char id[10];
char phone[20];
};
struct Student records[MAX_RECORDS];
int num_records = 0;
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 delete_by_id() {
char id[10];
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 delete_by_name() {
char name[20];
printf("请输入要删除的学生姓名:");
scanf("%s", name);
for (int i = 0; i < num_records; i++) {
if (strcmp(records[i].name, name) == 0) {
for (int j = i; j < num_records - 1; j++) {
records[j] = records[j + 1];
}
num_records--;
printf("删除成功!\n");
return;
}
}
printf("未找到该学生!\n");
}
void sort_by_id() {
for (int i = 0; i < num_records - 1; i++) {
for (int j = 0; j < num_records - i - 1; j++) {
if (strcmp(records[j].id, records[j + 1].id) > 0) {
struct Student temp = records[j];
records[j] = records[j + 1];
records[j + 1] = temp;
}
}
}
printf("按学号排序成功!\n");
}
void sort_by_name() {
for (int i = 0; i < num_records - 1; i++) {
for (int j = 0; j < num_records - i - 1; j++) {
if (strcmp(records[j].name, records[j + 1].name) > 0) {
struct Student temp = records[j];
records[j] = records[j + 1];
records[j + 1] = temp;
}
}
}
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 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");
}
void load_records() {
FILE *fp = fopen("records.txt", "r");
if (fp == NULL) {
printf("读取失败!\n");
return;
}
while (fscanf(fp, "%s %s %s", records[num_records].name, records[num_records].id, records[num_records].phone) != EOF) {
num_records++;
}
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("8. 数据保存\n");
printf("9. 数据读取\n");
printf("0. 退出\n");
scanf("%d", &choice);
switch (choice) {
case 1:
num_records = 0;
printf("通讯录已创建!\n");
break;
case 2:
display_records();
break;
case 3:
add_record();
break;
case 4:
delete_by_id();
break;
case 5:
delete_by_name();
break;
case 6:
sort_by_id();
break;
case 7:
sort_by_name();
break;
case 8:
save_records();
break;
case 9:
load_records();
break;
case 0:
return 0;
default:
printf("无效的选择!\n");
}
}
return 0;
}
```
这个程序使用了一个结构体 `Student` 来存储每个学生的姓名、学号和电话号码,使用一个数组 `records` 来存储所有学生的信息,使用一个变量 `num_records` 来记录当前记录数。程序提供了创建通讯录、显示通讯录、添加通讯录、删除通讯录、排序通讯录、数据保存和数据读取等功能。数据保存和数据读取使用了文件操作,将所有学生的信息保存到一个文本文件中,以便下次程序启动时可以读取。
阅读全文