用链表或者顺序表实现以下系统,完成线性表的建立(至少包括10个结点),以及线性表中信息(结点)的插入、查找、删除、修改、输出等操作,。若能用“文件”存储数据,可加分。
1.通讯录管理系统的设计与实现
(1)通讯者信息包括:编号(char num[10])、姓名(char name[10])、性别(char sex[10])、电话(char phone[20])、公司名称(char address[50])
(2)除了总的模块要求外,还需a.统计通讯录中男女比例;b.显示出同一公司中的人的信息。
运行主页面效果:
主菜单函数:
完整代码请访问:
腾讯文档腾讯文档-在线文档https://docs.qq.com/doc/p/71239d69a76f56cf1521717ae6b22c27cf876f10
int main() {
SeqList L;
InitList(&L);
int choice;
do {
printf("\n");
printf("**********通讯录管理系统**********\n");
printf("**********代码**********\n");
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");
printf("请选择操作序号:");
scanf("%d", &choice);
添加联系人:
switch (choice) {
case 1: { // 添加通讯者信息
Person p;
printf("请输入编号:");
scanf("%s", p.num);
printf("请输入姓名:");
scanf("%s", p.name);
printf("请输入性别:");
scanf("%s", p.sex);
printf("请输入电话:");
scanf("%s", p.phone);
printf("请输入公司名称:");
scanf("%s", p.address);
if (ListInsert(&L, L.length + 1, p)) {
printf("添加成功!\n");
} else {
printf("添加失败!\n");
}
break;
查看所有联系人:
// 根据编号查找顺序表L中的元素,并将其保存到e中
int GetElem(SeqList L, char *num, Person *e) {
for (int i = 0; i < L.length; i++) {
if (strcmp(L.data[i].num, num) == 0) { // 如果编号匹配
*e = L.data[i]; // 将元素保存到e中
return i + 1; // 返回元素在顺序表中的位置
}
}
return 0; // 没有找到匹配的元素
查找联系人:
case 3: { // 查找通讯者信息
char num[10];
printf("请输入要查找的通讯者编号:");
scanf("%s", num);
Person p;
if (GetElem(L, num, &p)) { // 如果编号存在
printf("编号:%s,姓名:%s,性别:%s,电话:%s,公司名称:%s\n", p.num, p.name, p.sex, p.phone, p.address);
} else { // 如果编号不存在
printf("没有找到编号为%s的通讯者信息!\n", num);
}
break;
}
修改联系人:
case 4: { // 修改通讯者信息
char num[10];
printf("请输入要修改的通讯者编号:");
scanf("%s", num);
Person p;
if (GetElem(L, num, &p)) { // 如果编号存在
printf("请输入修改后的信息:\n");
printf("请输入编号:");
scanf("%s", p.num);
printf("请输入姓名:");
scanf("%s", p.name);
printf("请输入性别:");
scanf("%s", p.sex);
printf("请输入电话:");
scanf("%s", p.phone);
printf("请输入公司名称:");
scanf("%s", p.address);
if (ListUpdate(&L, GetElem(L, num, &p), p)) {
printf("修改成功!\n");
} else {
printf("修改失败!\n");
}
} else { // 如果编号不存在
printf("没有找到编号为%s的通讯者信息!\n", num);
}
break;
统计男女性别:
// 统计通讯录中男女比例
void CountGenderRatio(SeqList L) {
int maleCount = 0, femaleCount = 0;
for (int i = 0; i < L.length; i++) {
if (strcmp(L.data[i].sex, "男") == 0) {
maleCount++;
} else if (strcmp(L.data[i].sex, "女") == 0) {
femaleCount++;
}
}
printf("男性人数:%d,女性人数:%d\n", maleCount, femaleCount);
按公司查找人员:
// 显示出同一公司中的人的信息
void ShowSameAddressPerson(SeqList L, char *address) {
printf("公司名称为%s的人员信息如下:\n", address);
for (int i = 0; i < L.length; i++) {
if (strcmp(L.data[i].address, address) == 0) {
printf("编号:%s,姓名:%s,性别:%s,电话:%s\n", L.data[i].num, L.data[i].name, L.data[i].sex, L.data[i].phone);
}
}
}
全局函数,定义结构体:
// 定义通讯者信息的结构体
typedef struct {
char num[10]; // 编号
char name[10]; // 姓名
char sex[10]; // 性别
char phone[20]; // 电话
char address[50]; // 公司名称
} Person;