C语言编程练习:建立一个同学通讯录,输入学号、姓名、电话号码、住址等信息,然后 对通信录进行显示、查找、添加、修改。 编写一个菜单驱动的通讯录,其功能要求: (1)通讯录的每一条信息包括学号、姓名、家庭住址、电话、分类(如 同事、朋友、同学、家人等)、EMAIL、QQ等。 (2)输入功能:可以一次完成若干条信息的输入。 (3)显示功能:完成全部通讯录信息的显示。(4)查找功能:可以按姓名或按类别等多种方式查找通讯信息 (5)修改功能:根据需要完成通讯录信息的更新、修改 (6)排序功能:可按照所有学生的学号从小到大进行排序; (7)通讯录数据要能够保存,可采用文件读写技术存放于专门的数据文 件如xxx.txt,在程序开始运行时,可以通过读取该文件获得记录数据。
时间: 2024-03-21 09:44:32 浏览: 91
这是一个非常好的 C 语言编程练习题目,下面是一个实现该功能的简单代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 100 //最大记录数
typedef struct Contact {
char id[20]; //学号
char name[20]; //姓名
char addr[50]; //家庭住址
char phone[20]; //电话
char category[20]; //分类
char email[50]; //EMAIL
char qq[20]; //QQ
} Contact;
Contact contacts[MAX_SIZE]; //通讯录数组
int count = 0; //记录数
void addContact() {
printf("请输入学号:");
scanf("%s", contacts[count].id);
printf("请输入姓名:");
scanf("%s", contacts[count].name);
printf("请输入家庭住址:");
scanf("%s", contacts[count].addr);
printf("请输入电话:");
scanf("%s", contacts[count].phone);
printf("请输入分类:");
scanf("%s", contacts[count].category);
printf("请输入EMAIL:");
scanf("%s", contacts[count].email);
printf("请输入QQ:");
scanf("%s", contacts[count].qq);
count++;
printf("添加成功!\n");
}
void showContacts() {
printf("学号\t姓名\t家庭住址\t电话\t分类\tEMAIL\tQQ\n");
for (int i = 0; i < count; i++) {
printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\n", contacts[i].id, contacts[i].name, contacts[i].addr, contacts[i].phone, contacts[i].category, contacts[i].email, contacts[i].qq);
}
}
void searchContactsByName() {
char name[20];
printf("请输入要查找的姓名:");
scanf("%s", name);
printf("学号\t姓名\t家庭住址\t电话\t分类\tEMAIL\tQQ\n");
for (int i = 0; i < count; i++) {
if (strcmp(name, contacts[i].name) == 0) {
printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\n", contacts[i].id, contacts[i].name, contacts[i].addr, contacts[i].phone, contacts[i].category, contacts[i].email, contacts[i].qq);
}
}
}
void searchContactsByCategory() {
char category[20];
printf("请输入要查找的分类:");
scanf("%s", category);
printf("学号\t姓名\t家庭住址\t电话\t分类\tEMAIL\tQQ\n");
for (int i = 0; i < count; i++) {
if (strcmp(category, contacts[i].category) == 0) {
printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\n", contacts[i].id, contacts[i].name, contacts[i].addr, contacts[i].phone, contacts[i].category, contacts[i].email, contacts[i].qq);
}
}
}
void modifyContact() {
char id[20];
printf("请输入要修改的学号:");
scanf("%s", id);
for (int i = 0; i < count; i++) {
if (strcmp(id, contacts[i].id) == 0) {
printf("请输入新的姓名(原姓名:%s):", contacts[i].name);
scanf("%s", contacts[i].name);
printf("请输入新的家庭住址(原家庭住址:%s):", contacts[i].addr);
scanf("%s", contacts[i].addr);
printf("请输入新的电话(原电话:%s):", contacts[i].phone);
scanf("%s", contacts[i].phone);
printf("请输入新的分类(原分类:%s):", contacts[i].category);
scanf("%s", contacts[i].category);
printf("请输入新的EMAIL(原EMAIL:%s):", contacts[i].email);
scanf("%s", contacts[i].email);
printf("请输入新的QQ(原QQ:%s):", contacts[i].qq);
scanf("%s", contacts[i].qq);
printf("修改成功!\n");
return;
}
}
printf("未找到该学号的记录!\n");
}
void sortContactsById() {
for (int i = 0; i < count - 1; i++) {
for (int j = 0; j < count - i - 1; j++) {
if (strcmp(contacts[j].id, contacts[j + 1].id) > 0) {
Contact temp = contacts[j];
contacts[j] = contacts[j + 1];
contacts[j + 1] = temp;
}
}
}
printf("排序成功!\n");
}
void saveContactsToFile(char* filename) {
FILE* fp;
fp = fopen(filename, "w");
if (fp == NULL) {
printf("文件打开失败!\n");
return;
}
for (int i = 0; i < count; i++) {
fprintf(fp, "%s %s %s %s %s %s %s\n", contacts[i].id, contacts[i].name, contacts[i].addr, contacts[i].phone, contacts[i].category, contacts[i].email, contacts[i].qq);
}
fclose(fp);
printf("保存成功!\n");
}
void loadContactsFromFile(char* filename) {
FILE* fp;
fp = fopen(filename, "r");
if (fp == NULL) {
printf("文件打开失败!\n");
return;
}
while (!feof(fp) && count < MAX_SIZE) {
fscanf(fp, "%s %s %s %s %s %s %s\n", contacts[count].id, contacts[count].name, contacts[count].addr, contacts[count].phone, contacts[count].category, contacts[count].email, contacts[count].qq);
count++;
}
fclose(fp);
printf("读取成功!\n");
}
int main() {
int choice;
char filename[] = "contacts.txt";
loadContactsFromFile(filename);
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("0.退出系统\n");
scanf("%d", &choice);
switch (choice) {
case 1:
addContact();
break;
case 2:
showContacts();
break;
case 3:
searchContactsByName();
break;
case 4:
searchContactsByCategory();
break;
case 5:
modifyContact();
break;
case 6:
sortContactsById();
break;
case 7:
saveContactsToFile(filename);
break;
case 0:
saveContactsToFile(filename);
printf("退出系统!\n");
exit(0);
default:
printf("无效的选择!\n");
break;
}
}
return 0;
}
```
这段代码使用了结构体来存储每个记录的信息,同时使用了文件读写技术实现了记录数据的保存和读取。菜单驱动的方式可以方便用户进行各种操作。
阅读全文