c语言写一段程序,要求具有数据插入、修改、删除、显示、查询和统计功能的电话簿管理程序。 基本功能: 人数不定,数据使用文件存放 1.记录每位联系人的学号、姓名、性别、工作单位电话号码和E-mai1地址建立单独的条目,存入数据文件。 2.可对记录中的姓名和电话号码等进行修改 3.可增加或删除记录 4. 可显示所有保存的记录 5.加入统计功能,可以统计男女或总人数 6.加入查询功能,通过姓名、学号或电话号码查询到同学的条目。 在开始画面加入简单的菜单便于选择功能 文件格式 1.储存数据文件格式 编号 姓名 性别 工作单位 电话号码 E-mail
时间: 2024-02-15 07:05:25 浏览: 85
很好,我可以帮你写一段简单的电话簿管理程序,但是在此之前,你需要了解以下几点:
1. C语言中文件操作需要用到stdio.h头文件
2. C语言中可以使用结构体来存储联系人信息,并通过指针数组来实现动态增加和删除
3. 统计功能可以通过遍历联系人数组来实现
4. 查询功能可以通过遍历联系人数组,并按照姓名、学号或电话号码进行匹配来实现
有了这些基础知识,下面是一份示例代码,供你参考:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义联系人结构体
struct Contact {
int id;
char name[20];
char gender[5];
char company[50];
char phone[20];
char email[50];
};
// 定义指针数组和联系人数量
struct Contact *contacts[100];
int contactCount = 0;
// 显示菜单
void showMenu() {
printf("1. 添加联系人\n");
printf("2. 修改联系人\n");
printf("3. 删除联系人\n");
printf("4. 显示所有联系人\n");
printf("5. 统计联系人\n");
printf("6. 查询联系人\n");
printf("7. 退出\n");
}
// 添加联系人
void addContact() {
struct Contact *contact = (struct Contact *)malloc(sizeof(struct Contact));
printf("请输入学号:");
scanf("%d", &(contact->id));
printf("请输入姓名:");
scanf("%s", contact->name);
printf("请输入性别:");
scanf("%s", contact->gender);
printf("请输入工作单位:");
scanf("%s", contact->company);
printf("请输入电话号码:");
scanf("%s", contact->phone);
printf("请输入E-mail地址:");
scanf("%s", contact->email);
contacts[contactCount++] = contact;
printf("添加成功!\n");
}
// 修改联系人
void modifyContact() {
int id;
printf("请输入要修改的联系人学号:");
scanf("%d", &id);
for (int i = 0; i < contactCount; i++) {
if (contacts[i]->id == id) {
struct Contact *contact = contacts[i];
printf("请输入新的姓名:");
scanf("%s", contact->name);
printf("请输入新的电话号码:");
scanf("%s", contact->phone);
printf("修改成功!\n");
return;
}
}
printf("未找到该联系人!\n");
}
// 删除联系人
void deleteContact() {
int id;
printf("请输入要删除的联系人学号:");
scanf("%d", &id);
for (int i = 0; i < contactCount; i++) {
if (contacts[i]->id == id) {
free(contacts[i]);
for (int j = i; j < contactCount - 1; j++) {
contacts[j] = contacts[j + 1];
}
contactCount--;
printf("删除成功!\n");
return;
}
}
printf("未找到该联系人!\n");
}
// 显示所有联系人
void showContacts() {
printf("编号\t姓名\t性别\t工作单位\t电话号码\tE-mail\n");
for (int i = 0; i < contactCount; i++) {
struct Contact *contact = contacts[i];
printf("%d\t%s\t%s\t%s\t%s\t%s\n", contact->id, contact->name, contact->gender, contact->company, contact->phone, contact->email);
}
}
// 统计联系人
void countContacts() {
int maleCount = 0;
int femaleCount = 0;
for (int i = 0; i < contactCount; i++) {
struct Contact *contact = contacts[i];
if (strcmp(contact->gender, "男") == 0) {
maleCount++;
} else if (strcmp(contact->gender, "女") == 0) {
femaleCount++;
}
}
printf("男性联系人:%d,女性联系人:%d,总联系人:%d\n", maleCount, femaleCount, contactCount);
}
// 查询联系人
void queryContact() {
int choice;
char keyword[20];
printf("请选择查询方式:\n");
printf("1. 姓名\n");
printf("2. 学号\n");
printf("3. 电话号码\n");
scanf("%d", &choice);
printf("请输入查询关键字:");
scanf("%s", keyword);
printf("查询结果:\n");
printf("编号\t姓名\t性别\t工作单位\t电话号码\tE-mail\n");
for (int i = 0; i < contactCount; i++) {
struct Contact *contact = contacts[i];
if ((choice == 1 && strcmp(contact->name, keyword) == 0) ||
(choice == 2 && contact->id == atoi(keyword)) ||
(choice == 3 && strcmp(contact->phone, keyword) == 0)) {
printf("%d\t%s\t%s\t%s\t%s\t%s\n", contact->id, contact->name, contact->gender, contact->company, contact->phone, contact->email);
}
}
}
int main() {
int choice;
while (1) {
showMenu();
printf("请选择功能:");
scanf("%d", &choice);
switch (choice) {
case 1:
addContact();
break;
case 2:
modifyContact();
break;
case 3:
deleteContact();
break;
case 4:
showContacts();
break;
case 5:
countContacts();
break;
case 6:
queryContact();
break;
case 7:
printf("谢谢使用!\n");
return 0;
default:
printf("无效的选择!\n");
break;
}
}
}
```
这段代码中,我们使用了结构体来存储联系人信息,使用指针数组来实现动态增加和删除,同时通过循环遍历实现了查询和统计功能。当然,这只是一个简单的示例,你可以根据自己的需求进行修改和扩展。
阅读全文