数据结构课程设计班级花名册维护Word下载.docx
《数据结构课程设计班级花名册维护Word下载.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计班级花名册维护Word下载.docx(29页珍藏版)》请在冰豆网上搜索。
将查找到得同学信息输出,对照确认无误方可删除,否则取消并返回菜单。
显示:
显示所有信息
将已记录的信息项全部输出,首先逐个读取文件信息,然后逐个输出。
修改:
修改同学信息
查找同学信息与删除操作的相同。
有六种修改方式可供选择,如姓名修改,学号修改等。
修改后可显示新的信息。
查找:
查询同学信息
以姓名方式查找,将所有符合要求的信息全部输出。
排序:
进行学号排序
排序是以学号从小到大的方式排列。
首先读取文件所有数据项,通过学号比较,按从小到大的方式重新排序并保存。
保存:
将信息保存到文件中输出
在系统中输入信息,打开文件,然后将信息写入文件保存。
计数:
计算已保存信息数
打开文件,使用循环将文件中原有信息逐个读取,并计算个数项。
2.2总体程序框图
2.3各个模块之间的主要关系
各个模块相互关联,共同构成整个班级花名册系统,从而实现添加、删除、显示、修改、查询和排序等功能。
3.系统功能模块的具体设计
3.1各个模块的程序流程图及运行界面
(1)创建班级花名册
(2)添加新同学
(3)查询同学信息
(4)删除同学信息
(5)附:
图3.1-1学号排序界面
图3.1-2学生信息显示界面
图3.1-3修改信息界面
图3.1-4关闭花名册界面
3.2关键代码分析说明
(1)通过输入第一位同学的信息,创建班级花名册。
voidset_up()
{
intn=1;
printf("
姓名\t学号\t\t电话号码\t地址\t备注\n"
);
scanf("
%s%s%s%s%s"
fbook[0].name,fbook[0].xuehao,fbook[0].number,fbook[0].address,fbook[0].note);
save(n);
通讯录创建成功!
\n"
main_menu();
}
(2)通过输入新同学的信息,向已有的班级花名册名单里添加新同学,添加完毕选择是否继续添加。
是,则继续添加;
否,则返回班级花名册菜单。
voidadd_student()
{
intn,x;
n=count();
do
请根据提示输入信息,按Enter结束!
姓名\t学号\t\t电话号码\t地址\t备注\n"
fbook[n].name,fbook[n].xuehao,fbook[n].number,fbook[n].address,fbook[n].note);
save(n+1);
已保存!
\n\n"
n++;
是否继续添加?
(1).是
(2).返回菜单\n请选择:
"
scanf("
%d"
&
x);
}while(x==1);
//判断是否继续进行添加操作
//返回主菜单
(3)通过save()函数,将学生信息保存在文件中。
voidsave(intn)
{
FILE*fp;
inti;
if((fp=fopen("
fbook.txt"
"
w"
))==NULL)//打开文件
{
printf("
\nCannotopenfile!
exit(0);
}
for(i=0;
i<
n;
i++)//将信息写入文件
if(fbook[i].name[0]!
='
\0'
)
{
if(fwrite(&
fbook[i],sizeof(structbook),1,fp)!
=1)
printf("
Filewriteerror!
}
fclose(fp);
(4)通过search()函数,查询已存在学生的信息。
输入要查询的同学姓名,若此同学不存在,则输出“没有此同学记录,请重新输入”,若存在,则输出该同学信息,进而选择是否继续查询。
同时若连续三次输入错误,系统将自动关闭!
voidsearch()
structbooks;
intk,i,n;
intj=0,d1;
do{
k=-1;
do{
请输入要查询的同学姓名:
%s"
s.name);
for(i=0;
i++)
if(strcmp(s.name,fbook[i].name)==0)//输出所有符合要求的同学信息
k=i;
s=fbook[i];
%s\t%s\t%s\t%s\t%s\n\n"
fbook[k].name,fbook[k].xuehao,fbook[k].number,fbook[k].address,fbook[k].note);
if(k==-1)//判断是否输入错误
if(j==2)
已连续三次输入错误,系统自动关闭!
else
没有此同学记录,请重新输入!
j++;
if(j==3)
exit(0);
}while(k==-1);
//正确查找,输出信息并推出循环
是否继续查询?
(1).是
(2).否,返回菜单\n请选择:
d1);
}while(d1==1);
//判断是否继续进行查询操作
(5)输入要删除同学的姓名,若不存在,输出“没有此同学记录,请重新输入”;
若存在,则记录此姓名同学个数,若个数为1,选择删除或取消,若个数大于1,则再次输入要删除学生的学号,选择删除或取消。
Do
请输入要删除的同学姓名:
i++)
if(strcmp(s.name,fbook[i].name)==0)
d++;
if(d>
1)
i++)
%s\t%s\t%s\t%s\t\t%s\n"
fbook[i].name,fbook[i].xuehao,fbook[i].number,fbook[i].address,fbook[i].note);
因有同学姓名相同,请输入要删除的同学学号:
s.xuehao);
if(strcmp(s.xuehao,fbook[i].xuehao)==0)
{if(j==2)
else
4.程序调试分析
[1]静态调试:
按C语言的语法规则进行检查。
[2]动态调试:
将程序运行,发现好多程序语句错位了,造成了大量错误,耗时巨大。
5.程序使用说明
使用班级花名册维护,通过选择创建、添加、删除、显示、修改、查询、排序和关闭选项,按照系统提示输入信息或选项,即可实现系统所有的功能。
6.总结
通过这次对班级花名册维护的设计,我获益颇多。
长时间的思索这个课程设计使得我对数据结构的理解及其运用更加透彻与深刻。
在设计程序的过程中,我也曾遇到令人头疼的难题,令自己百思不得其解。
如何将存储的学生的信息全部显示出来,这个问题一直困扰着我。
最后发现只要计算出存储学生的个数,将每个学生作为一个单元输出,即可以解决此问题。
然而当所有的程序完成的时候,并没想象中那么容易运行,总有一些零零碎碎的错误隐藏在一个个“阴暗”的角落里,研究修改了很久,仍有错误找不出来,于是就只好求助于网络和书本了。
当然,这个系统可能还有一些不足,甚至有一部分并不需要,或内容太过繁杂,但设计程序的过程就是这样先繁后简。
通过借鉴外物以达到知识扩充与理解运用,也丰富了我自身,不过以后我会逐渐加以改善争取精简以及完善它的功能。
致谢
[1]XX文库.通讯录管理系统
[2]严蔚敏,吴伟民.数据结构(C语言版)
参考文献
[1]XX文库.通讯录管理系统
[2]付永华,王素立,薛海燕.C++高级语言程序设计
[3]严蔚敏,吴伟民.数据结构(C语言版)
附:
源程序
#include<
conio.h>
//控制台输入输出
stdlib.h>
//标准库函数
stdio.h>
//I/O函数
#include<
string.h>
//字符串函数
#defineN100//宏定义
voidsave(intn);
//保存信息
voidmain_menu();
//班级花名册管理选项
voidset_up();
//创建通讯录
voidadd_student();
//添加新同学
voiddel_student();
//删除同学信息
voidshow_all();
//显示所有信息
voidchange();
//修改同学信息
voidsearch();
//查询同学信息
voidsort();
//学号排序
intcount();
//计算已记录信息数
structbook//花名册结构体
charname[20];
//姓名
charxuehao[15];
//学号
charnumber[15];
//电话号码
charaddress[40];
//地址
charnote[79];
//备注
}fbook[N];
voidmain_menu()//班级花名册管理菜单
intchoice,w,j=0;
do
∽∽∽∽∽∽∽∽∽∽班级花名册∽∽∽∽∽∽∽∽∽∽\n"
);
1.创建通讯录2.添加新同学\n"
3.删除同学信息4.显示所有信息\n"
5.修改同学信息6.查询同学信息\n"
7.进行学号排序8.关闭花名册\n"
∽∽∽∽∽∽∽∽∽欢迎您的使用∽∽∽∽∽∽∽∽∽∽\n"
\t\t温馨提示:
若连续三次输入错误,系统将自动关闭\n"
\n请选择:
"
scanf("
choice);
if(choice<
1||choice>
8)//判断是否选择了错误的选项
w=1;
if(j==1)
printf("
请注意,已连续两次输入错误,连续三次输入错误系统将自动关闭!
请确定后重新选择!
if(j==2)
if(j==0)
输入有误,请从新选择!
j++;
else
w=0;
if(j==3)//若连续三次输入错误,自动关闭系统
exit(0);
}while(w==1);
//正确选择,退出循环
switch(choice)
case1:
set_up();
break;
case2:
add_student();
//添加新同学
case3:
del_student();
//删除同学信息
case4:
show_all();
//显示所有信息
case5:
change();
case6:
search();
case7:
sort();
case8:
谢谢使用班级花名册,欢迎下次使用!
//关闭花名册
exit(0);
voidchange_xx(inti,intn)
intc,j=0;
请选择需要修改的选项:
\n1.姓名2.学号3.电话号码4.地址5.备注6.修改全部\n\n"
请选择:
c);
if(c>
6||c<
}while(c>
1);
请根据提示输入新的信息:
switch(c)
{
case1:
printf("
姓名:
scanf("
fbook[i].name);
break;
case2:
学号:
fbook[i].xuehao);
电话号码:
fbook[i].number);
地址:
fbook[i].address);
备注:
fbook[i].note);
姓名\t学号\t\t电话号码\t地址\t\t备注\n"
voidmain()
main_menu();
//调用主菜单函数
voidset_up()//创建通讯录
intn=1;
请根据提示输入信息!
save(n);
voidadd_student()//添加新同学
intn,x;
n=count();
do
save(n+1);
n++;
}while(x==1);
voiddel_student()//删除学生信息
structbooks;
inti,n,k=-1;
intj=0,d=0,d1,d2;
do
for(i=0;
if(strcmp(s.name,fbook[i].name)==0)//查找所要删除同学信息的姓名
{
k=i;
s=fbook[i];
d++;
//计算此姓名同学个数
}
if(d>
1)//若存在相同姓名,则进一步查找
{
printf("
for(i=0;
if(strcmp(s.name,fbook[i].name)==0)
printf("
printf("
scanf("
for(i=0;
if(strcmp(s.xuehao,fbook[i].xuehao)==0)
{
k=i;
s=fbook[i];
}
if(k==-1)//判断是否输入错误
if(j==1)
请确定后重新输入!
if(j==2)
if(j==0)
j++;
//计算连续输入错误次数
if(j==3)//若连续三次输入错误,自动关闭系统
exit(0);
}while(k==-1);
//找到所要查找同学,退出循环
%s\t%s\t%s\t%s\t%s\n"
确定删除此同学信息?
(1).是
(2).取消并返回菜单\n请选择:
if(d1==1)//删除同学信息并保存
fbook[k].name[0]='
;
save(n);
}
else//取消删除命令并返回主菜单
已删除.\n\n"
是否继续操作?
(1).是
(2).否,返回菜单\n请选择:
d2);
}while(d2==1);
//判断是否继续进行删除操作
voidshow_all()//显示所有信息
intn,i;
i++)//输出所有同学信息