C语言程序设计学生信息管理系统Word文件下载.docx
《C语言程序设计学生信息管理系统Word文件下载.docx》由会员分享,可在线阅读,更多相关《C语言程序设计学生信息管理系统Word文件下载.docx(17页珍藏版)》请在冰豆网上搜索。
参考文献………………………………………………………………………(19)
源代码…………………………………………………………………………(19)
实习内容简介
题目:
学生通讯录管理系统
要求:
1.可实现信息的添加、删除,可按学号、姓名查询;
2.学生信息必须包含学号、姓名、学院、专业、籍贯。
地址、电话号码;
3.必须有注释。
日期:
2011年6月20日至27日,共8个半天。
地点:
信息楼301
指导老师:
曹雪莲
完成情况:
1.程序可完成信息的添加,可按学号、姓名分别查询;
2.程序可按姓名、学号分别删除,并在删除前显示删除学生的全部信息;
按姓名删除,若出现同名情况,会依次出现系统提示是否删除,可选择删除或跳过;
3.在程序文件夹中有一“学生信息库”的txt文件,可查看学生系统里全部学生信息;
4.设置有一个恢复区系统,可输出、查询删除的信息,并在可同文件夹中“删除信息库”的txt文件中查看删除信息;
总体结构如下:
程序代号说明
代号说明
结构体student
结构体stu
全局变量
num
学号
inf
学生信息,包含左结构体student全部信息
n
链表节点数量
name
姓名
next
本类型结构体指针
rhead
恢复区链表头指针
academy
学院
searchnum
目标个数
major
专业
province
省份
address
地址
phone
电话号码
函数
add
增加
delet
删除(按姓名或学号)
search
查找
search_num
搜索学号
search_name
搜索姓名
print
输出链表上信息
print1
输出链表上单个节点的信息
save
以二进制格式储存数据
txtsave
以文本格式储存数据
crete
从二进制文件中读取信息,建立链表
deletinput
将删除信息导入恢复区链表
system
管理系统主要程序
recover
恢复区系统主要程序
此外,局部变量的含义比较固定:
head
链表头指针,若与rhead一同出现则代表管理系统链表头指针
select、input
为选择的值
filename
文件名
程序流程图:
本次实习我的思路就是,先从二进制文件中读取信息,形成链表,对链表进行基本操作,如输出、添加、删除、查找。
程序结束时将链表保存在二进制文件和文本文件中。
管理系统流程图:
运行管理系统部分时,先从文件“”中读取数据(若无该文件则创建文件),构建链表;
后续操作都是对于链表进行操作,如添加、查找、删除、输出等;
离开该部分时则保存链表里的信息到已存在的“”,并以ASCII形式存储至“学生信息库.txt”,方便检查。
恢复区系统流程图:
恢复区系统思路与管理系统思路类似,连函数调用都是一样的,二进制文件名为“”,文本文件名为“删除信息库.txt”。
具体函数模块功能将在第三章中具体介绍。
程序分为管理系统和恢复区系统两部分和读取文件、存储文件四部分,以下分别介绍。
读取文件、存储文件
读取文件
该函数模块(程序名为creat)于管理系统或恢复区系统运行前运行,目的是读取二进制文件信息,构建链表;
若无目标文件,则创建文件。
返回值为头指针。
函数主体为:
structstu*p1,*p2;
structstu*head;
while(fread(&
(p1->
inf),LEN,1,fp))um);
ame);
fprintf(fp,"
%10s"
(p->
inf).academy);
inf).majoy);
inf).province);
inf).address);
%20s\n"
inf).phone);
p=p->
next;
}
}
管理系统模块
管理系统(名为system)主要有四个函数功能部分,分别为添加、删除、查找、输出,以下依次介绍:
添加
该模块函数名为add,无返回值,参数为链表头指针,功能为向已建立的链表中从键盘上输入信息。
um));
printf("
\n姓名:
"
);
scanf("
%s"
(p1->
inf).name);
\n学院:
\n专业:
\n省份:
\n地址:
\n电话号码:
while((p2->
next)!
=NULL)学号查找的函数主体为:
printf("
请输入拟删除学生学号:
\n"
longsnum=0;
scanf("
%ld"
&
snum);
structstu*p1,*p2;
p1=head;
while(snum!
=p1->
&
p1->
next!
=NULL)姓名查找(包含同名情况):
intselect=0,count=0;
um);
printf("
\n姓名%s"
\n学院%s"
\n专业%s"
\n省份%s"
\n地址%s"
\n电话号码%s\n"
p=p->
恢复区系统模块
恢复区系统(其名为recover)是为了显示被删除信息而建立的,在函数运行之初便建立了恢复区链表,头指针设为rhead,与管理系统头指针head相区别。
并且,rhead被设为全局变量,方便被函数调用。
恢复区系统主要有查找、输出功能,其功能模块基本调用管理系统的函数,所以不再赘述。
而恢复区的输入函数,即管理区删除信息时将信息输入恢复区链表的函数,上文已提及,即deletinput,此为连接恢复区与管理系统的桥梁,只不过是单行的。
函数为:
voiddeletinput(structstu*p)
序视图就是C语言的黑框,没有美观可言。
C++的视图好一些,我也想过用C++编译一个窗口,然后在程序中调用。
但是C++还没学会,而且在调试程序的过程中遇到一些困难让我遗忘了这个想法,曾看程序看到凌晨两点,所以想法没有实践。
9.在软件技术普及的今天,做个数据库已是小菜一碟,很到软件可以使用,如MicrosoftOfficeAccess,并且功能极其强大,比我花了几天时间做出来的高级不知多少倍。
与那些专业程序相比,我的这程序不值一提,也就是练习练习C语言而已。
实习感受
此次实习在一个凉爽的夏日开始,这在武汉极反常。
因为我们考试基本考完了,只剩下一门英语了,所以实习时间比较充裕。
实习的题目也不算太难,思路很清晰,总共三步走:
1.读取文件;
2.处理链表;
3.保存文件。
操作的主体是链表,原以为会很轻松,但还是遇到很多问题,以前上课时从未想到过。
经历过基本一天都在看程序的时间,我发现我懂的太少,要学的太多。
对文件的操作我一直都没注意,现在才发现其乐无穷;
以前觉得链表很难,现在轻松写出程序。
学习与实践果然是不可分割的。
实习中,大家八仙过海各显神通,用链表是比较传统的,而且节省内存,有的用数组,这也可以理解,方便使用,排序便利;
有的直接用文件C语句查询、删除,让我大开眼界,文件还能这么用!
在写报告时看到一篇用指针数组做的程序,相当有意思。
发现水平还是不够,同学可以用C语言编出一个比较漂亮的界面,还可以随意调用文件操作,实在让人赞叹不已。
此次实习加强了我对链表的理解,很多以前迷糊的概念得到了明确,亦让我感到C语言强大之处,直接操作内存,实在很暴力。
一句诗概括此次实习,“山重水复疑无路,柳暗花明又一村”;
如今C语言实习已然结束,但是对于计算机语言的学习决不能放松,“雄关漫道真如铁,而今迈步从头越”。
现在的世界是信息化的,我们现在对于Matlab的要求也很大,C语言也是其基础。
路漫漫其修远兮,吾将上下而求索。
感谢曹老师抽出时间将C语言实习提前和这八天来的指导,同时亦感谢大家这些天来的支持与帮助,此外额外感谢武汉夏天罕见的凉爽天气,感谢生活。
附录
参考书目
1.谭浩强著《C语言程序设计》2005年7月第3版298-299、300、302-303、338页
2.吴煌坚学长的实习报告
源代码
#include<
>
#defineNULL0
#defineLENsizeof(structstudent)
#defineLENSsizeof(structstu)
structstudentum);
voidprint1(structstu*p)um);
structstu*search_name(structstu*p,charsname[20])um));
(head->
n++;
p2->
next=NULL;
continue;
=NULL)um);
voidsystem()
{
structstu*head;
xt"
;
加学生信息\n2.查找学生信息\n3.删除学生信息\n4.输出全体学生信息\n5.退出\n\n\n"
找学生信息\n2.输出全体删除信息\n3.退出\n\n\n"
//菜单
%d"
select);
switch(select)//菜单选择进入相关子程序
{
case1:
search(rhead);
break;
//搜寻
case2:
print(rhead);
//输出
case3:
//跳出菜单
default:
ERROR"
//输入错误
}while(select!
=3);
欢迎闪人\n"
save(rhead->
next,filename2);
//存储文件
voidmain()
intselect=1;
while((select==1)||(select==2))
*********************************************\n"
进入管理系统,请按1\n"
进入恢复区,请按2\n"
其它键离开\n"
制作人:
061092徐宗博\n"
请选择:
if(select==1)system();
//进入管理系统
elseif(select==2)recover();
//进图恢复区