设计要求
问题描述
纸质的通讯录系统已经不能满足大家的要求,容易丢失、查找困难等问题是纸质通讯录所不能克服的缺点。“学生通讯管理系统”是为了帮助老师、同学,或者其他一些需要使用通讯录的人员进行管理和分析的一种应用程序。
需求分析
- 输入数据建立通讯录
- 查询通讯录系统中满足要求的信息
- 插入新的通讯录信息
- 删除不需要的通讯录信息
- 查看所有通讯录信息
概要设计
主界面设计
为了实现学生通讯录管理系统各功能的管理,设计一个含有多个菜单项的主控菜单子程序以链接系统的各项子功能,方便用户使用本系统。本系统主控菜单运行界面如图所示。

存储结构设计
本系统主要采用链表结构类型来表示存储在“学生通讯录管理系统”中的信息。其中,链表结点由四个分量构成;通讯录成员学号、通讯录成员姓名、通讯录成员电话号码、指向该结构体的指针。
系统功能设计
本系统设置了5个子功能菜单,5个子功能的设计描述如下。
- 建立通讯录系统。可以一次输入多个成员通讯录的信息,建立通讯录。

- 插入通讯记录。每次可以插入一个成员通讯录的信息。如果要连续插入多个成员通讯录信息必须多次选择该功能。

- 查询通讯记录。可以按两种方式查询所需要的通讯录成员记录,一是按学号查询,二是按姓名查询。

- 删除通讯记录。可以对通讯录中不再需要的信息进行删除。

- 显示通讯录系统。可以查看通讯录中所有的通讯录成员记录。

程序代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254
| # include <stdio.h> # include <stdlib.h> # include <string.h>
typedef struct student //定义学生结点 { char name[20]; int num; char phone[20]; struct student *next; }stud;
void Menu() { printf("\n\n\n"); printf("***********************班级通讯录管理系统***********************\n\n"); printf(" 1.建立通讯录 \n\n"); printf(" 2.添加通讯录 \n\n"); printf(" 3.删除通讯录 \n\n"); printf(" 4.查询通讯录 \n\n"); printf(" 5.显示通讯录 \n\n"); printf(" 0.退出系统 \n\n"); printf("****************************************************************\n"); }
void Init(stud *H) { H->next=NULL; }
void Input(stud *H) { int n; stud *p, *q; p=H; while(p->next) { p=p->next; } while(true) { q=(stud *)malloc(sizeof(stud)); q->next = NULL; printf("请输入学生信息:\n"); printf("姓名:"); scanf("%s", &q->name); printf("\n"); printf("学号:"); scanf("%d", &q->num); printf("\n"); printf("电话:"); scanf("%s", &q->phone); printf("\n"); p->next=q; p=q;
printf("是否接着输入:1(继续)/0(结束)\n"); scanf("%d", &n); if(n==0) break; } }
void Output(stud *H) {
stud *p; p = H->next; if(!p) { printf("\n没有学生记录!!!\n"); return ; } printf("姓名 学号 电话\n"); while(p) { printf("%s %d %s\n", p->name, p->num,p->phone); p=p->next; } }
void Findm(stud *H) {
char str[20]; bool f=false; stud *p; p=H->next; printf("请输入姓名:\n"); scanf("%s", str); if(!p) { printf("没有符合条件的学生记录!\n"); return ; } printf("姓名 学号 电话\n"); while(p) { if(strcmp(str, p->name)==0) { f=true; printf("%s %d %s\n", p->name, p->num,p->phone); } p=p->next; } if(!f) { printf("没有符合条件的学生记录!\n"); }
}
void Findh(stud *H) {
char str; bool f=false; stud *p; p=H->next; printf("请输入学号:\n"); scanf("%d", str); if(!p) { printf("没有符合条件的学生记录!\n"); return ; } printf("姓名 学号 电话\n"); while(p) { if(str==p->num) { f=true; printf("%s %d %s\n", p->name, p->num, p->phone); } p=p->next; } if(!f) { printf("没有符合条件的学生记录!\n"); } }
void Find(stud *H) { int select;
printf("*************************查询**************************************\n\n"); printf(" 1.按姓名 \n\n"); printf(" 2.按学号 \n\n"); printf(" 0.退出 \n\n"); printf("*******************************************************************\n\n"); while(true) { printf("请选择(0-2)"); scanf("%d",&select); if(select>=0&&select<3) break; } switch(select) {
case 1: Findm(H); break; case 2: Findh(H); break; } }
void Del(stud *H) { char str[20]; printf("\n请输入要删除记录的姓名:\n"); scanf("%s", str); stud *p, *q; p=H; q=H->next; bool flag=false; while(q) { if(strcmp(q->name, str)==0) { flag=true; p->next=q->next; q=p->next;break; } p=q; q=q->next; } printf("\n删除成功!!\n"); printf("\n\n删除成功后的学生通讯信息:\n"); Output(H); }
void Add(stud *H) { int n; stud *p, *q; p=H; while(p->next) { p=p->next; } while(true) { q=(stud *)malloc(sizeof(stud)); q->next = NULL; printf("\n请输入添加学生的信息:\n"); printf("姓名:"); scanf("%s", &q->name); printf("\n"); printf("学号:"); scanf("%d", &q->num); printf("\n"); printf("电话:"); scanf("%s", &q->phone); printf("\n"); p->next=q; p=q;
printf("是否继续添加:1(继续)/0(结束)\n"); scanf("%d", &n); if(n==0) break; } printf("\n添加成功!\n"); printf("\n\n添加成功后的学生通讯信息:\n"); Output(H); }
int main() { stud *H; H = (stud *)malloc(sizeof(stud)); Init(H); bool flag; int select, m; while(true) { Menu(); printf("请输入(0-5):\n"); flag=true; while(flag) { flag=false; scanf("%d", &select); if(select<0 || select>5) { printf("输入不正确,请重新输入(0-5):\n"); flag=true; } } switch(select) { case 0: return 0; break; case 1: Input(H); break; case 2: Add(H); break; case 3: Del(H); break; case 4: Find(H); break; case 5: Output(H); break; } printf("\n请选择:1(继续)/0(结束)\n"); scanf("%d", &m); if(m==0) return 0;
} return 0; }
|
微信公众号
