通讯录程序设计.docx
《通讯录程序设计.docx》由会员分享,可在线阅读,更多相关《通讯录程序设计.docx(31页珍藏版)》请在冰豆网上搜索。
![通讯录程序设计.docx](https://file1.bdocx.com/fileroot1/2022-10/10/17ba881e-56f9-4232-88da-4883250ffb72/17ba881e-56f9-4232-88da-4883250ffb721.gif)
通讯录程序设计
学生通讯录系统
学校:
中北大学
姓名:
张泽新
学号:
1314010132
班级:
A02
学院:
软件学院
指导教师:
尹四清
题目:
学生通讯录
实训目的:
掌握 C 语言的基本语法规则,以及深入理解函数
的调用,指针,结构体和链表的相关知识点。
做
好项目的具体分析。
实训内容:
完成对学生通讯录程序调试以及运行
实训内容:
设计一个实用的小型通讯录程序,具有添加,
查询和删除功能。
由姓名,电话号码 1,电话
号码 2,QQ 号组成,姓名可以由字符和数字混
合编码。
电话号码可由字符和数字组成。
实现
功能:
实训要求:
(1)系统应显示这样的菜单,请选择系统功能项:
a 信息录入功能
b 信息浏览功能
c 信息查询功能((按姓名查询)
d 信息修改功能
e 系统退出功能
(2)执行一个具体的功能之后,程序将重新显
示菜单。
(3)将通讯录基本信息保存到文件中。
*总体设计模块和程序规划结构图
如图 1.0,其中包含各个函数的调用
程序详细结构图以及涉及到的核心代码:
录入信息结构图 1.1
开始
YN
是否继续输入学生
信息
调用输入函数
调用菜单函数
结束
void input_record1()//输入函数总,包含了创建学生还有指针移
动
{
//void print_menu_main();//输入菜单
char continue_input = 'N';//判断是否继续输入
stu *pLastStu = NULL;//最后学生的指针
stu *pNewStu = (stu *)malloc(sizeof(stu));//创建学生节点返回
其地址,这是链表
pNewStu->next = NULL;//节点的指针指向空
create_stu_by_input(pNewStu);//创建一个学生
if(head == NULL)
{
head = pNewStu;
} else{
pLastStu = get_last_student(head);//移动指针
pLastStu->next = pNewStu;// 连接节点
}
printf("继续输入学生成绩?
(Y 继续, N 返回菜单)");
getchar();
continue_input = getchar();
if (continue_input == 'n' || continue_input == 'N'){
print_menu_main();
}
else{
input_record1();
}
}
输出函数结构图以及核心代码
输出表头结构
依次打印表中的元素
输出表尾结构
返回菜单函数
结束
void show_record1(){//输出函数总:
包含了三部分表格头,表格
尾巴,含有学生信息
void print_menu_main();//
stu *p = head;
print_table_head();
while(p !
= NULL) {
print_table_row(p);
p = p->next;
}
print_table_buttom();
printf("按任意键返回菜单...\n");
getch();
print_menu_main();
}
保存文件结构图以及核心代码
开始
确定文件名以及文件是
用来写的
y
While 循环,是否头
指针为空?
n
结束循环关闭流
把学生信息写进文件
中
结束
void save_to_file1(){//保存文件总
void print_menu_main();//所调用的函数的声明
void save_to_file();
FILE *fp;
char file[100];
stu *p= head;
printf("请输入文件名:
");
scanf("%s", file);
save_to_file();
fp=fopen(file, "w");
while(p !
= NULL){
fprintf(fp, "%d %s %s %s %s %s\n",
p->xuhao, p->num, p->name, p->sex, p->QQ,
p->phone);
p = p->next;
}
fclose(fp);
printf("保存成功!
\n 按任意键返回菜单..\n");
getchar();
getchar();
print_menu_main();
}
加载信息结构图以及核心代码
开始
把链表释放掉,使链
表为空
输入文件名字,格式
设置为读取
是否遇到输入文件结
束的标志?
yn
结束循环
从文件中读取信息然后
连接成单链表
结束
void load_from_file1(){//重新加载函数总
void print_menu_main();
void clear_record(stu *p);//所调用的函数声明
FILE *fp;
char file[100];
clear_record(head); /*释放整个链表*/
stu *p= head, *q;
printf("请输入文件名:
");
scanf("%s", file);
fp=fopen(file, "r");
stu *pLastStu = NULL;
while(!
feof(fp)){//如果未遇到输入文件的结束标志
stu *pNewStu = (stu *)malloc(sizeof(stu));
pNewStu->next = NULL;
fscanf(fp, "%d %s %s %s %s %s",
&(pNewStu->xuhao),pNewStu->num,
pNewStu->name, pNewStu->sex,
pNewStu->QQ, pNewStu->phone);
if(head == NULL){//指针移动
head = pNewStu;
}
else{
pLastStu = get_last_student(head);
pLastStu->next = pNewStu;//将链表连接起来
}
}
//释放加载后的空间
q = head;
while(q->next->next !
= NULL){
q = q->next;
}
free(q->next);
q->next = NULL;
fclose(fp);
printf("装载成功!
\n 按任意键返回菜单..\n");
getchar();
getchar();
print_menu_main();
}
按名字查询信息核心代码以及结构图
开始
请输入要查询的名字初始
化名字
Yn
是否与输入的名字
相等
得到学生信息的指针移动指针
输出要查询的学生是
信息
结束
void inquire_name1()
{
void print_menu_main();
stu *p = head;
char name[20];
printf("\n 请输入你要查询的名字:
");
scanf("%s",&name);
while(strcmp(p->name,name)!
=0)
{
p=p->next;
}
if(p==NULL)
{
printf("\n 你所输入的学生暂时不存在");
printf("按任意键返回菜单...\n");
getch();
print_menu_main();
}
system("cls");
printf("\n 该学生的有关信息\n");
printf("+----------+----------+----------+----------+-----------+---------
---+\n");
printf("|序号|学号|姓名|性别
|QQ|电话|\n");
printf("+----------+----------+----------+----------+-----------+---------
---+\n");
printf("|%10d|%10s|%10s|%10s|%10s|%11s|\n",
p->xuhao,p->num,p->name,p->sex,p->QQ,p->phone);
printf("+----------+----------+----------+----------+-----------+---------
---+\n");
printf("按任意键返回菜单...\n");
getch();
print_menu_main();
}
信息修改核心代码以及流程图
开始
输入要修改学生的名字
y
是否找到要修改的
学生
n
得到指针,修改信息
移动指针
结束
void revise_message()
{
printf("输入要修改的学生的姓名:
\n");
scanf("%s",name);
while(strcmp(p->name,name)!
=0)
{
p=p->next;//寻找要修改的学生
}
if(p==NULL)
{
printf("\n 你所输入的学生暂时不存在");
printf("按任意键返回菜单...\n");
getch();
print_menu_main();
}else{
printf("\n您要修改那一项?
\n");
printf("\n1 序号\n");
printf("\n2 学号\n");
printf("\n3 姓名\n");
printf("\n4 性别\n");
printf("\n5QQ\n");
printf("\n6 电话\n");
scanf("%d",&choice);
switch(choice)
{
case 1:
printf("\n请输入修改后的序号\n");
scanf("%s",&p->xuhao);
break;
case 2:
printf("\n请输入修改后的学号\n");
scanf("%s",p->num);
break;
case 3:
printf("\n请输入修改后的姓名\n");
scanf("%s",p->name);
break;
case 4:
printf("\n请输入修改后的性别\n");
scanf("%s",p->sex);
break;
case 5:
printf("\n请输入修改后的 QQ\n");
scanf("%s",p->QQ);
break;
case 6:
printf("\n请输入修改后的电话\n");
scanf("%s",p->phone);
break;
}
}
system("cls");
printf("修改信息成功\n");
printf("按任意键返回菜单...\n");
getch();
print_menu_main();
}
程序运行截图
1 输入学生的成绩截图
2 显示学生的信息截图
3 保存文件截图
4 读取