生成一个c语言通讯信息系统包括:姓名、工作单位、办公电话、住宅电话、家庭住址。试设计一通讯信息管理系统,使之能提供以下功能: 1通讯信息录入、修改、删除功能; 2信息排序及浏览功能,按姓名排序; 3按姓名查询; 4 通讯信息可以扩充。
时间: 2023-09-25 09:06:26 浏览: 102
### 回答1:
为了实现这个通讯信息管理系统,我们可以采用以下步骤:
1. 设计数据结构:通讯信息包括姓名、工作单位、办公电话、住宅电话和家庭住址等信息,我们可以设计一个结构体来表示这些信息。
```
typedef struct {
char name[20];
char company[50];
char office_phone[20];
char home_phone[20];
char address[100];
} ContactInfo;
```
2. 实现录入、修改和删除功能:我们可以定义一个数组来存储通讯信息,然后分别实现录入、修改和删除功能。
```
ContactInfo contacts[100];
int num_contacts = 0;
void add_contact() {
ContactInfo c;
printf("请输入姓名:");
scanf("%s", c.name);
printf("请输入工作单位:");
scanf("%s", c.company);
printf("请输入办公电话:");
scanf("%s", c.office_phone);
printf("请输入住宅电话:");
scanf("%s", c.home_phone);
printf("请输入家庭住址:");
scanf("%s", c.address);
contacts[num_contacts++] = c;
printf("添加成功!\n");
}
void modify_contact() {
char name[20];
printf("请输入要修改的联系人姓名:");
scanf("%s", name);
int index = find_contact(name);
if (index == -1) {
printf("未找到该联系人!\n");
return;
}
ContactInfo c = contacts[index];
printf("请输入新的工作单位(原:%s):", c.company);
scanf("%s", c.company);
printf("请输入新的办公电话(原:%s):", c.office_phone);
scanf("%s", c.office_phone);
printf("请输入新的住宅电话(原:%s):", c.home_phone);
scanf("%s", c.home_phone);
printf("请输入新的家庭住址(原:%s):", c.address);
scanf("%s", c.address);
contacts[index] = c;
printf("修改成功!\n");
}
void delete_contact() {
char name[20];
printf("请输入要删除的联系人姓名:");
scanf("%s", name);
int index = find_contact(name);
if (index == -1) {
printf("未找到该联系人!\n");
return;
}
for (int i = index; i < num_contacts - 1; i++) {
contacts[i] = contacts[i + 1];
}
num_contacts--;
printf("删除成功!\n");
}
```
其中,`find_contact` 函数可以用来查找某个联系人在数组中的位置。
3. 实现排序和浏览功能:我们可以采用冒泡排序算法,按照姓名首字母的字典序进行排序。
```
void sort_contacts() {
for (int i = 0; i < num_contacts - 1; i++) {
for (int j = 0; j < num_contacts - i - 1; j++) {
if (strcmp(contacts[j].name, contacts[j + 1].name) > 0) {
ContactInfo temp = contacts[j];
contacts[j] = contacts[j + 1];
contacts[j + 1] = temp;
}
}
}
}
void print_contacts() {
for (int i = 0; i < num_contacts; i++) {
printf("姓名:%s\n", contacts[i].name);
printf("工作单位:%s\n", contacts[i].company);
printf("办公电话:%s\n", contacts[i].office_phone);
printf("住宅电话:%s\n", contacts[i].home_phone);
printf("家庭住址:%s\n", contacts[i].address);
printf("\n");
}
}
```
4. 实现按姓名查询功能:我们可以遍历数组,找到姓名与输入字符串相同的联系人。
```
void search_contact() {
char name[20];
printf("请输入要查询的联系人姓名:");
scanf("%s", name);
int index = find_contact(name);
if (index == -1) {
printf("未找到该联系人!\n");
return;
}
ContactInfo c = contacts[index];
printf("姓名:%s\n", c.name);
printf("工作单位:%s\n", c.company);
printf("办公电话:%s\n", c.office_phone);
printf("住宅电话:%s\n", c.home_phone);
printf("家庭住址:%s\n", c.address);
}
```
5. 实现扩充功能:我们可以在添加联系人时,判断数组是否已满,如果已满则重新分配更大的内存并复制原数组中的数据。
```
void add_contact() {
ContactInfo c;
printf("请输入姓名:");
scanf("%s", c.name);
printf("请输入工作单位:");
scanf("%s", c.company);
printf("请输入办公电话:");
scanf("%s", c.office_phone);
printf("请输入住宅电话:");
scanf("%s", c.home_phone);
printf("请输入家庭住址:");
scanf("%s", c.address);
if (num_contacts == sizeof(contacts) / sizeof(ContactInfo)) {
ContactInfo *new_contacts = (ContactInfo *)malloc(sizeof(ContactInfo) * num_contacts * 2);
memcpy(new_contacts, contacts, sizeof(ContactInfo) * num_contacts);
free(contacts);
contacts = new_contacts;
}
contacts[num_contacts++] = c;
printf("添加成功!\n");
}
```
完整代码如下:
### 回答2:
设计一个C语言的通讯信息管理系统,实现以下功能:
1. 通讯信息录入、修改、删除功能:用户可以通过输入姓名、工作单位、办公电话、住宅电话和家庭住址来录入通讯信息。当需要修改通讯信息时,用户可以通过输入姓名来定位到要修改的记录,并进行相应的修改。同样地,用户也可以通过姓名来删除通讯信息。
2. 信息排序及浏览功能:系统可以按照姓名对通讯信息进行排序,并提供浏览功能。用户可以选择按照升序或降序排列通讯信息,系统会相应地显示排序后的结果。用户可以通过按键来依次浏览通讯信息。
3. 按姓名查询功能:用户可以通过输入姓名进行查询,系统会找出包含该姓名的记录并显示出来。如果存在多条记录,用户可以通过按键浏览所有相关的记录。
4. 通讯信息扩充功能:系统可以根据需求进行扩充。例如,可以增加更多的字段来存储更详细的信息,如电子邮箱、职位等。用户可以根据自己的需要进行修改和扩展。
系统的基本结构可以使用结构体来实现,每个通讯信息可以作为一个结构体的实例。通过使用动态内存分配来管理通讯信息的存储空间,可以方便地实现录入、修改和删除功能。使用排序算法,如冒泡排序或快速排序,可以对通讯信息按姓名进行排序。通过遍历通讯信息数组,并与用户输入的姓名进行匹配,可以实现查询功能。
总之,这个通讯信息管理系统可以帮助用户方便地录入、修改、删除通讯信息,并提供排序、浏览和查询功能。同时,系统还具有扩展性,可以根据需要增加更多的字段和功能。希望能满足用户对通讯信息管理的基本需求。
### 回答3:
为了设计一个具有上述功能的C语言通讯信息管理系统,可以采用数据结构和相关的操作函数。以下是一个简化的设计方案:
首先,我们需要定义一个通讯信息的结构体,包括姓名、工作单位、办公电话、住宅电话、家庭住址等字段。
```c
struct ContactInfo {
char name[50];
char company[100];
char officePhone[20];
char homePhone[20];
char address[200];
};
```
接下来定义一个动态数组来存储通讯信息的集合,并实现相关的操作函数。
```c
#define MAX_CONTACTS 100
struct ContactInfo contacts[MAX_CONTACTS];
int numContacts = 0;
void addContact(struct ContactInfo contact) {
if (numContacts < MAX_CONTACTS) {
contacts[numContacts] = contact;
numContacts++;
}
}
void removeContact(char* name) {
int i;
for (i = 0; i < numContacts; i++) {
if (strcmp(contacts[i].name, name) == 0) {
// 将最后一个联系人复制到当前位置,然后数量减少
contacts[i] = contacts[numContacts - 1];
numContacts--;
break;
}
}
}
void modifyContact(char* name, struct ContactInfo newContact) {
int i;
for (i = 0; i < numContacts; i++) {
if (strcmp(contacts[i].name, name) == 0) {
contacts[i] = newContact;
break;
}
}
}
void sortContacts() {
// 使用冒泡排序按姓名排序
int i, j;
for (i = 0; i < numContacts - 1; i++) {
for (j = 0; j < numContacts - i - 1; j++) {
if (strcmp(contacts[j].name, contacts[j + 1].name) > 0) {
struct ContactInfo temp = contacts[j];
contacts[j] = contacts[j + 1];
contacts[j + 1] = temp;
}
}
}
}
struct ContactInfo* findContact(char* name) {
int i;
for (i = 0; i < numContacts; i++) {
if (strcmp(contacts[i].name, name) == 0) {
return &contacts[i];
}
}
return NULL;
}
```
以上是一个简单的通讯信息管理系统的设计,可以通过调用相关的操作函数来实现通讯信息的录入、修改、删除、排序、浏览和查询等功能。此外,如果需要扩展通讯信息的字段,只需修改联系人结构体即可。
阅读全文