【题目】建立参会人员管理系统,对参会人员相关信息进行管理。参会人员的相关信息 包括:姓名、电话号码、身份证号码、单位、房间号等。具体要求: (1)建立该存储结构。 (2)录入参会人员的相关信息。 (3)查找某个参会人员的房间号。 (4)修改某个参会人员的房间号。 (5)删除某个参会人员及相关信息。 (6)插入某个参会人员的相关信息。 (7)统计某指定单位的参会人员人数。 【编程提示】将每个参会人员当作一个结点,类型为结构体,结构体中包含参会人员的相关信息和结点指针。定义参会人员结点的结构为 struct node A char name [40]; char tele[201; char ID[181; char unit[60]; char no[6]; struct node*1ink; /*姓名*/ /*电话号码*/ /*身份证号码*/ /*单位*/ /*房间号/ /*指向下一结点的指针/ ; 编写查询函数,从第一条记录开始,将记录中的单位字段和待比较的字符串进行比较,若相等,则统计后继续循环,直至循环结束;若不相等,则继续循环直至结束。删除指定记录时,先根据输入的字段进行查找。如果没找到指定结点,输出没找到信息。果找到指定结点,则分三种情况讨论:该结点为头结点时,修改原头结点所指向的结点为新的头结点;该结点为中间结点时,修改该结点的前一结点的指针使其指向该结点的后一结点;该结点为尾结点时,修改原尾结点的前一结点为新的尾结点;最后释放该结点。(使用c语言)
时间: 2024-03-19 08:41:57 浏览: 18
以下是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct node {
char name[40];
char tele[20];
char ID[18];
char unit[60];
char no[6];
struct node *link;
};
// 全局变量,指向链表头结点
struct node *head = NULL;
// 函数声明
void insert_node();
void delete_node();
void modify_node();
void search_node();
void count_node();
void print_list();
int main() {
int choice;
do {
printf("\n=== 参会人员管理系统 ===\n");
printf("1. 录入参会人员信息\n");
printf("2. 删除参会人员信息\n");
printf("3. 修改参会人员信息\n");
printf("4. 查找参会人员信息\n");
printf("5. 统计单位参会人数\n");
printf("6. 显示全部参会人员信息\n");
printf("0. 退出程序\n");
printf("请输入选项:");
scanf("%d", &choice);
switch (choice) {
case 1:
insert_node();
break;
case 2:
delete_node();
break;
case 3:
modify_node();
break;
case 4:
search_node();
break;
case 5:
count_node();
break;
case 6:
print_list();
break;
case 0:
printf("程序已退出!\n");
break;
default:
printf("输入错误,请重新输入!\n");
break;
}
} while (choice != 0);
return 0;
}
// 插入参会人员信息
void insert_node() {
struct node *new_node;
new_node = (struct node*)malloc(sizeof(struct node));
printf("请输入参会人员姓名:");
scanf("%s", new_node->name);
printf("请输入参会人员电话号码:");
scanf("%s", new_node->tele);
printf("请输入参会人员身份证号码:");
scanf("%s", new_node->ID);
printf("请输入参会人员单位:");
scanf("%s", new_node->unit);
printf("请输入参会人员房间号:");
scanf("%s", new_node->no);
new_node->link = head;
head = new_node;
printf("参会人员信息录入成功!\n");
}
// 删除参会人员信息
void delete_node() {
char no[6];
struct node *ptr, *prev;
printf("请输入要删除的参会人员房间号:");
scanf("%s", no);
ptr = head;
prev = NULL;
while (ptr != NULL) {
if (strcmp(ptr->no, no) == 0) { // 找到要删除的结点
if (prev == NULL) { // 要删除的结点是头结点
head = ptr->link;
} else {
prev->link = ptr->link;
}
printf("参会人员信息删除成功!\n");
free(ptr);
return;
}
prev = ptr;
ptr = ptr->link;
}
printf("没有找到要删除的参会人员信息!\n");
}
// 修改参会人员信息
void modify_node() {
char no[6];
struct node *ptr;
printf("请输入要修改的参会人员房间号:");
scanf("%s", no);
ptr = head;
while (ptr != NULL) {
if (strcmp(ptr->no, no) == 0) { // 找到要修改的结点
printf("请输入新的参会人员房间号:");
scanf("%s", ptr->no);
printf("参会人员信息修改成功!\n");
return;
}
ptr = ptr->link;
}
printf("没有找到要修改的参会人员信息!\n");
}
// 查找参会人员信息
void search_node() {
char no[6];
struct node *ptr;
printf("请输入要查找的参会人员房间号:");
scanf("%s", no);
ptr = head;
while (ptr != NULL) {
if (strcmp(ptr->no, no) == 0) { // 找到要查找的结点
printf("参会人员姓名:%s\n", ptr->name);
printf("参会人员电话号码:%s\n", ptr->tele);
printf("参会人员身份证号码:%s\n", ptr->ID);
printf("参会人员单位:%s\n", ptr->unit);
printf("参会人员房间号:%s\n", ptr->no);
return;
}
ptr = ptr->link;
}
printf("没有找到要查找的参会人员信息!\n");
}
// 统计单位参会人数
void count_node() {
char unit[60];
struct node *ptr;
int count = 0;
printf("请输入要统计的单位:");
scanf("%s", unit);
ptr = head;
while (ptr != NULL) {
if (strcmp(ptr->unit, unit) == 0) { // 找到要统计的单位
count++;
}
ptr = ptr->link;
}
printf("单位 %s 参会人数为:%d\n", unit, count);
}
// 显示全部参会人员信息
void print_list() {
struct node *ptr;
ptr = head;
while (ptr != NULL) {
printf("参会人员姓名:%s\n", ptr->name);
printf("参会人员电话号码:%s\n", ptr->tele);
printf("参会人员身份证号码:%s\n", ptr->ID);
printf("参会人员单位:%s\n", ptr->unit);
printf("参会人员房间号:%s\n", ptr->no);
ptr = ptr->link;
}
}
```