数据结构课程设计学生籍贯管理系统.docx
《数据结构课程设计学生籍贯管理系统.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计学生籍贯管理系统.docx(18页珍藏版)》请在冰豆网上搜索。
![数据结构课程设计学生籍贯管理系统.docx](https://file1.bdocx.com/fileroot1/2023-1/10/33a426c7-9c98-4744-9843-84ccecc7fbc2/33a426c7-9c98-4744-9843-84ccecc7fbc21.gif)
数据结构课程设计学生籍贯管理系统
1设计内容及要求
1.1课程设计要求
1.要求利用C语言面向过程的编程思想来完成系统的设计;
2.突出C语言的函数特征,以多个函数实现每一个子功能;
3.画出功能模块图;
4.进行简单界面设计,能够实现友好的交互;
5.具有清晰的程序流程图和数据结构的详细定义;
6.熟练掌握C语言对文件的各种操作。
1.2学生籍贯管理系统的要求
该程序应该具有下列功能:
(1)输入学生信息并以磁盘文件保存;
(2)读取磁盘文件并显示输出所有学生的籍贯信息;
(3)按学号或姓名查询其籍贯;
(4)按籍贯查询并输出该籍贯的所有学生;
(5)能添加、删除和修改学生的籍贯信息;
(6)显示输出天津籍和非天津籍学生的信息并可分别存盘;
2程序设计环境及设计思想
2.1软件设计环境
MicrosoftVisualC++6.0
2.2设计思想
该程序运用了结构体数组的输入,输出,修改及存储,采用循环的方式对程序进行编写,同时也采用循环的方式对程序进行输入、显示、查询、检索、删除、编辑等操作。
实现编程的意义。
3数据保存方式以及格式
本学生信息系统将能自动把输入的学生信息保存为C:
//data.txt文件中,在文件的读取时,系统将能自动把该二进制文件读出,并在屏幕上显示出学生信息。
前提是必须在C盘中创建data.txt文件。
4模块的调用、划分与功能图
4.1各软件模块之间的调用方式
程序中各个模块之间的调用方式主要是通过函数的调用实现的。
先使用主函数调用框架函数,然后在框架函数中调用不同功能的函数,达到对学生信息管理的目的。
4.2系统完成功能
每条记录包括一个学生学号、姓名、籍贯。
1、输入功能:
可以一次完成无数条记录的输入。
2、显示功能:
完成全部学生记录的显示。
3、查找功能:
完成按姓名、学号查找学生记录,并显示。
4、修改功能:
通过查找学生姓名、学号,修改学生记录。
5、保存功能:
将学生记录保存到任何自定义的文件中。
6、读取功能:
将保存到文件中的学生记录读取出来。
7、分类功能:
分别显示天津籍跟非天津籍的学生并分别存盘,且根据需要显示出来。
8、应提供一个界面来调用各个功能,调用界面和功能的操作界面应尽可能清晰美观。
4.3功能框图显示
图表1
5界面设计
功能主界面提供了良好的控制台界面,能够方便的根据功能采取相应的操作,简单明了,去除了复杂、多余的步骤。
当输入不符合要求时,则会显示相应的提示。
运行程序时,该程序显示的主界面显示如下:
图1
输入功能号:
1,则显示已经存入的学生籍贯信息记录
图2
输入功能号:
2,则显示删除学生记录界面
图3
输入功能号:
3,显示修改学生籍贯界面
图4
输入功能号:
7,显示查询所有上海籍的学生
图5
输入功能号:
8,显示天津籍跟非天津籍的学生
图6
5.1学生籍贯管理系统公共数据结构
在学生籍贯管理系统中使用的公共数据结构例举如下:
#defineMAX300\\定义常量N表示可录入最大学生数
inti,j、k,sum,\\i表示第几位学生,j\k都用来存放赋的值,sum表示查询时该学生不存在的学生数0人
intcount\\存放学生总人数
inti\\变量i存放循环次数
structstudent\\定义一个名为student的结构体,这个结构体定义了学生的基本信息
charno\\定义学生的学号
charname\\定义学生的姓名
charad\\定义学生的籍贯
intb\\用来跳出某项功能
structstudent、structstudentstu[MAX],定义两个结构体,两者是嵌套的。
dd是全局的结构体变量名
6小结
通过这次课设,我学会了如何把数据结构的知识应用到实践当中,同时也进一步加深了对c/c++语言语法的应用,以及深刻的掌握了数据结构和c/c++语言的结合运用。
在编程过程中,遇到了许多问题,在一次次的运行错误后,总是发现问题的所在,并且一步步加以改正,也从中学到了许多知识,感觉又重新学习了一次数据结构课程。
虽然我的程序还不够完善,还需加以改进以实现更多的功能,但是我会尽我最大的努力去完成它,我相信我会努力去把程序做的更加完美。
参考文献
[1]严蔚敏、吴伟民编著.数据结构(C语言版).清华大学出版社。
[2]藤国文等编著.数据结构课程设计.北京:
清华大学出版社。
[3]齐景嘉编著.数据结构(含实训).东南大学出版社。
[4]朱儒荣、朱辉等编著.数据结构常见题型解析与模拟题西北工业大学出版社。
[5]徐孝凯,贺桂英等编著.数据结构(C语言描述).清华大学出版社。
[6]徐孝凯编著.数据结构实用教程.北京:
清华大学出版社。
[7]严蔚敏,陈文博编著.数据结构及算法教程.北京:
清华大学出版社。
[8]刘振安,刘燕君等编著.C程序设计课程设计.北京:
机械出版社。
[9]李建学、李光元、吴春芳等编著.数据结构课程设计案例精编.清华大学出版社。
附录:
程序源代码
#include
#include
#include
#include
#defineMAX300
structstudent
{
charname[10];//姓名
charno[50];//学号
charad[20];//籍贯
};
structdata
{intcount;//当前学生数组中学生的个数
structstudentstu[MAX];//学生数组
}dd;
//显示主菜单
voidmenu()
{
system("cls");
printf("\n");
printf("\t\t\t********************************\n");
printf("\t\t\t**\n");
printf("\t\t\t*学生籍贯信息记录簿*\n");
printf("\t\t\t**\n");
printf("\t\t\t*[0]退出*\n");
printf("\t\t\t*[1]查看所有学生信息*\n");
printf("\t\t\t*[2]输入学生记录*\n");
printf("\t\t\t*[3]删除学生记录*\n");
printf("\t\t\t*[4]修改学生籍贯*\n");
printf("\t\t\t*[5]查询(学号)*\n");
printf("\t\t\t*[6]查询(姓名)*\n");
printf("\t\t\t*[7]查询(籍贯)*\n");
printf("\t\t\t*[8]显示天津籍与非天津籍*\n");
printf("\t\t\t**\n");
printf("\t\t\t********************************\n");
}
//等待用户按回车后回到主菜单
voidto_menu()
{
charc1,c2;
printf("\n\n\n按回车键返回主菜单...");
scanf("%c%c",&c1,&c2);
menu();
}
//查看所有学生信息
voidview_data()
{
inti;
printf("姓名\t学号\t\t籍贯");
printf("\n-------------------------------------------------------------------\n");
for(i=0;i
printf("%s\t%s\t%s\n",dd.stu[i].name,dd.stu[i].no,dd.stu[i].ad);
}
//将数据从结构体数组保存到文件中
voidsave_data()
{
FILE*fp;
inti,k;
k=dd.count;
fp=fopen("c:
/dada.txt","w");
fwrite(&k,sizeof(int),1,fp);
for(i=0;ifwrite(&dd.stu[i],sizeof(structstudent),1,fp);
fclose(fp);
}
//输入学生记录
voidadd_data()
{
structstudentst;
intb;
intk;
inti,j;
while
(1)
{
j=0;
printf("\n请输入学生信息:
");
printf("\n姓名\t学号\t\t籍贯");
printf("\n---------------------------------------------------------------\n");
scanf("%s%s%s",st.name,st.no,st.ad);
for(i=0;i
if(strcmp(dd.stu[i].no,st.no)==0)
{
j=1;
printf("学号录入重复,请重新输入!
");
break;}
if(j==1)
continue;
if(j==0)
{
k=dd.count;
strcpy(dd.stu[k].name,st.name);
strcpy(dd.stu[k].no,st.no);
strcpy(dd.stu[k].ad,st.ad);
dd.count++;}
printf("\n\n继续添加学生信息[1-yes0-no]:
");
scanf("%d",&b);
if(b==0)break;
}
save_data();
}
//将数据从文件读到结构体数组中
voidread_data()
{
FILE*fp;
inti,k;
structstudentst;
k=0;
if(access("c:
/dada.txt",0)==-1)//如果文件不存在
{
fp=fopen("c:
/dada.txt","w");
fwrite(&k,sizeof(int),1,fp);
fclose(fp);
}
fp=fopen("c:
/dada.txt","r");
fread(&k,sizeof(int),1,fp);
dd.count=k;
for(i=0;i{
fread(&st,sizeof(structstudent),1,fp);
strcpy(dd.stu[i].name,st.name);
strcpy(dd.stu[i].no,st.no);
strcpy(dd.stu[i].ad,st.ad);
}
fclose(fp);
}
//删除学生记录
voiddelete_data()
{
inti,k;
charno[50];
printf("\n请输入要删除学生的学号:
");
scanf("%s",no);
k=-1;
for(i=0;i
{
if(strcmp(dd.stu[i].no,no)==0)
{k=i;
break;
}
}
if(k==-1)
{
printf("\n\n没有找到该学生(学号-%s)!
",no);
}
else
{for(i=k;i
{
strcpy(dd.stu[i].name,dd.stu[i+1].name);
strcpy(dd.stu[i].no,dd.stu[i+1].no);
strcpy(dd.stu[i].ad,dd.stu[i+1].ad);
}
dd.count--;
save_data();
printf("\n\n删除(学号-%s)成功!
",no);
}
}
//编辑学生记录
voidedit_data()
{
inti,k;
charno[50],ad[20];
printf("\n请输入要编辑学生的学号:
");
scanf("%s",no);
k=-1;
for(i=0;i
{
if(strcmp(dd.stu[i].no,no)==0)
{
k=i;
break;
}
}
if(k==-1)
{
printf("\n\n没有找到该学生(学号-%s)!
",no);
}
else
{
printf("\n姓名:
%s,学号:
%s",dd.stu[k].name,dd.stu[k].no);
printf("\n请修改学生数据:
");
printf("\n籍贯:
");
scanf("%s",ad);
strcpy(dd.stu[k].ad,ad);
}
}
//查询(学号)
voidquery_data_no()
{
inti,k;
charno[50];
printf("\n请输入要查询学生的学号:
");
scanf("%s",no);
k=-1;
for(i=0;i
{
if(strcmp(dd.stu[i].no,no)==0)
{
{
printf("\n\n姓名\t学号\t\t籍贯");printf("\n-----------------------------------------------------------------\n");
}
k=i;
printf("%s\t%s\t%s\n",dd.stu[i].name,dd.stu[i].no,dd.stu[i].ad);
}
}
if(k==-1)
{
printf("\n\n没有找到该学生(学号-%s)!
",no);
}
}
//查询(姓名)
voidquery_data_name()
{
inti,k;
charname[10];
printf("\n请输入要查询学生的姓名:
");
scanf("%s",name);
k=-1;
for(i=0;i
{
if(strcmp(dd.stu[i].name,name)==0)
{
{
printf("\n\n姓名\t学号\t\t籍贯");printf("\n-----------------------------------------------------------------\n");
}
k=i;
printf("%s\t%s\t%s\n",dd.stu[i].name,dd.stu[i].no,dd.stu[i].ad);
}
}
if(k==-1)
{
printf("\n\n没有找到该学生(姓名-%s)!
",name);
}
}
//查询(籍贯)
voidquery_data_address()
{
inti,sum=0;charad[20];
printf("请输入籍贯信息:
");
scanf("%s",ad);
printf("该籍贯的学生有:
");
for(i=0;i
if(strcmp(dd.stu[i].ad,ad)==0)
{
printf("%s\t",dd.stu[i].name);
sum++;
}
if(sum==0)
printf("0人\n");
}
//判断显示天津籍
voidDis()
{
inti;
printf("天津学生:
\n");
printf("学号\t\t姓名籍贯\n");
for(i=0;i
if(strcmp(dd.stu[i].ad,"天津")==0)
{
printf("%s\t%7s%5s\n",dd.stu[i].no,dd.stu[i].name,dd.stu[i].ad);
}
}
printf("\n");
printf("\n");
printf("非天津学生:
\n");
printf("学号\t\t姓名籍贯\n");
for(i=0;i
{
if(strcmp(dd.stu[i].ad,"天津")!
=0)
{
printf("%s\t%7s%5s\n",dd.stu[i].no,dd.stu[i].name,dd.stu[i].ad);
}
}
}
//主函数
voidmain()
{
intfun;
read_data();
menu();
while
(1)
{
printf("请输入功能号[0-7]:
",&fun);
scanf("%d",&fun);
switch(fun)
{
case0:
//退出
break;
case1:
//查看所有学生信息
view_data();
break;
case2:
//输入学生记录
add_data();
break;
case3:
//删除学生记录
delete_data();
break;
case4:
//编辑学生记录
edit_data();
break;
case5:
//查询(学号)
query_data_no();
break;
case6:
//查询(姓名)
query_data_name();
break;
case7:
//查询(籍贯)
query_data_address();
break;
case8:
//显示天津籍与非天津籍
Dis();
break;
}
if(fun==0)break;
to_menu();
}
}