C语言程序设计学生信息管理系统.docx

上传人:b****2 文档编号:1607793 上传时间:2023-05-01 格式:DOCX 页数:38 大小:276.30KB
下载 相关 举报
C语言程序设计学生信息管理系统.docx_第1页
第1页 / 共38页
C语言程序设计学生信息管理系统.docx_第2页
第2页 / 共38页
C语言程序设计学生信息管理系统.docx_第3页
第3页 / 共38页
C语言程序设计学生信息管理系统.docx_第4页
第4页 / 共38页
C语言程序设计学生信息管理系统.docx_第5页
第5页 / 共38页
C语言程序设计学生信息管理系统.docx_第6页
第6页 / 共38页
C语言程序设计学生信息管理系统.docx_第7页
第7页 / 共38页
C语言程序设计学生信息管理系统.docx_第8页
第8页 / 共38页
C语言程序设计学生信息管理系统.docx_第9页
第9页 / 共38页
C语言程序设计学生信息管理系统.docx_第10页
第10页 / 共38页
C语言程序设计学生信息管理系统.docx_第11页
第11页 / 共38页
C语言程序设计学生信息管理系统.docx_第12页
第12页 / 共38页
C语言程序设计学生信息管理系统.docx_第13页
第13页 / 共38页
C语言程序设计学生信息管理系统.docx_第14页
第14页 / 共38页
C语言程序设计学生信息管理系统.docx_第15页
第15页 / 共38页
C语言程序设计学生信息管理系统.docx_第16页
第16页 / 共38页
C语言程序设计学生信息管理系统.docx_第17页
第17页 / 共38页
C语言程序设计学生信息管理系统.docx_第18页
第18页 / 共38页
C语言程序设计学生信息管理系统.docx_第19页
第19页 / 共38页
C语言程序设计学生信息管理系统.docx_第20页
第20页 / 共38页
亲,该文档总共38页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C语言程序设计学生信息管理系统.docx

《C语言程序设计学生信息管理系统.docx》由会员分享,可在线阅读,更多相关《C语言程序设计学生信息管理系统.docx(38页珍藏版)》请在冰点文库上搜索。

C语言程序设计学生信息管理系统.docx

C语言程序设计学生信息管理系统

 

C语言课程设计

姓名:

徐宗博

学号:

************

班级:

061092

指导教师:

曹老师

 

2011年6月25日

 

第一章:

实习内容

1.1实习内容简介………………………………………………………

(2)

1.2程序代号说明………………………………………………………(3)

第二章:

程序流程图

第三章:

函数模块介绍

3.1读取文件、存储文件………………………………………………(6)

3.2管理系统模块………………………………………………………(8)

3.3恢复区系统模块……………………………………………………(12)

3.4功能展示……………………………………………………………(12)

第四章:

实习总结…………………………………………………………(16)

第五章:

实习体会…………………………………………………………(17)

附录:

参考文献………………………………………………………………………(19)

源代码…………………………………………………………………………(19)

第一章:

实习内容

1.1实习内容简介

题目:

学生通讯录管理系统

要求:

1.可实现信息的添加、删除,可按学号、姓名查询;

2.学生信息必须包含学号、姓名、学院、专业、籍贯。

地址、电话号码;

3.必须有注释。

日期:

2011年6月20日至27日,共8个半天。

地点:

信息楼301

指导老师:

曹雪莲

完成情况:

1.程序可完成信息的添加,可按学号、姓名分别查询;

2.程序可按姓名、学号分别删除,并在删除前显示删除学生的全部信息;按姓名删除,若出现同名情况,会依次出现系统提示是否删除,可选择删除或跳过;

3.在程序文件夹中有一“学生信息库”的文件,可查看学生系统里全部学生信息;

4.设置有一个恢复区系统,可输出、查询删除的信息,并在可同文件夹中“删除信息库”的文件中查看删除信息;

总体结构如下:

1.2程序代号说明

代号说明

结构体

结构体

全局变量

学号

学生信息,包含左结构体全部信息

n

链表节点数量

姓名

本类型结构体指针

恢复区链表头指针

学院

 

 

目标个数

专业

 

 

省份

 

 

 

地址

 

 

 

电话号码

 

 

 

 

函数

增加

删除(按姓名或学号)

查找

搜索学号

搜索姓名

输出链表上信息

1

输出链表上单个节点的信息

以二进制格式储存数据

以文本格式储存数据

从二进制文件中读取信息,建立链表

将删除信息导入恢复区链表

管理系统主要程序

恢复区系统主要程序

此外,局部变量的含义比较固定:

链表头指针,若与一同出现则代表管理系统链表头指针

为选择的值

文件名

第二章:

程序流程图

程序流程图:

本次实习我的思路就是,先从二进制文件中读取信息,形成链表,对链表进行基本操作,如输出、添加、删除、查找。

程序结束时将链表保存在二进制文件和文本文件中。

管理系统流程图:

运行管理系统部分时,先从文件“”中读取数据(若无该文件则创建文件),构建链表;后续操作都是对于链表进行操作,如添加、查找、删除、输出等;离开该部分时则保存链表里的信息到已存在的“”,并以形式存储至“学生信息库”,方便检查。

恢复区系统流程图:

恢复区系统思路与管理系统思路类似,连函数调用都是一样的,二进制文件名为“”,文本文件名为“删除信息库”。

具体函数模块功能将在第三章中具体介绍。

 

第三章:

函数模块介绍

 

程序分为管理系统和恢复区系统两部分和读取文件、存储文件四部分,以下分别介绍。

3.1读取文件、存储文件

读取文件

该函数模块(程序名为)于管理系统或恢复区系统运行前运行,目的是读取二进制文件信息,构建链表;若无目标文件,则创建文件。

返回值为头指针。

函数主体为:

*p1,*p2;

*;

((&(p1->),1))读取数据

{

1若读取数据成功节点数加一

(1)1给头结点赋值

p2->1加新的结构体

p21;

p1=(*)();

}

();

p2->尾结点处指针置0

();

存储文件

该函数模块分为两部分,以二进制形式存储链表信息(程序名为)和以文本形式存储(程序名为)。

二进制形式文件是为了读取文件,优点是快速;文本文件是为了方便检查,优点是明确可见。

无返回值。

二进制形式存储程序为:

(*[20])存储链表信息

{

*;

*p;

;

(,"")以二进制方式打开文件

(()(&(>),1))写入文件

{

>;

}

();

}

其中为链表头指针,为存储文件名,在主函数中已有定义。

存储在文本文件程序为:

(*[20])以文本形式将链表输入文件

{

*;

*p;

;

(,"w")以文本形式打开

()链表不到尽头不停止

{

(,"",(>))向文本文件中写入数据

(,"%10s",(>));

(,"%10s",(>));

(,"%10s",(>));

(,"%10s",(>));

(,"%10s",(>));

(,"%20s\n",(>));

>;

}

}

3.2管理系统模块

管理系统(名为)主要有四个函数功能部分,分别为添加、删除、查找、输出,以下依次介绍:

添加

该模块函数名为,无返回值,参数为链表头指针,功能为向已建立的链表中从键盘上输入信息。

函数主体为:

*p1,*p2建立结构体指针

p2;

p1=(*)()输入信息

("\n学号(输入数值请小于32756):

")(""((p1->)));

("\n姓名:

")("",(p1->));

("\n学院:

")("",(p1->));

("\n专业:

")("",(p1->));

("\n省份:

")("",(p1->));

("\n地址:

")("",(p1->));

("\n电话号码:

")("",(p1->));

((p2->))移动指针到链表尾

{

p22->;

}

p2->1;移动指针

p21;

p2->;

删除

函数名为,返回值为指向结构体的链表头指针,参数为链表头指针,可按姓名和学号删除。

若按姓名删除时,为防止同名情况,则查询到一个目标,就显示出信息,并提示是否删除。

1.按学号查找的函数主体为:

("请输入拟删除学生学号:

\n");

0;

("");

*p1,*p2;

p1;

(1->1->)1指向的学号不是要找的节点,并且后面还有节点

{p2111->;}1后移

(1->)找到目标

{

1(p1)(p1)1()为输出相应指针指向的节点信息()为向恢复区系统链表输入信息的函数,在后续3.3中会提及

(p1)1->若p1指向头节点,将第二个节点位置赋予

p2->1->否则将下一结点位置赋给前一节点位置

;

}

("该学生不存在");

();

2.按姓名查找(包含同名情况):

00选择删除与否代表删除次数

[20]定义要搜的名字

*p1,*p2;

p12;

("请输入学生姓名:

\n");

("")输入学号

(p1)历遍链表

{

((1->)0)与目标名字是否一致,相同为0

{

1(p1)若符合姓名条件,显示信息

("删除该生信息?

\n删除选1\n按其它键不删除\n")保证达到目标姓名时显示学生信息,可选择不删除

("");

(1)

{p2111->;}不删除就再次循环

{

;

(p1);

删除数加一

(p1)1->删除信息

p2->1->更改指针,绕过目标

}

}

p2111->;

}

(0)("该生信息不存在")若未删除则视为未发现目标学生

();

查找

函数名为,参数为链表头指针,无返回值。

其中查找可按姓名与学号进行查找,若找到目标即出现在屏幕;若出现同名情况,则依次显示。

查找与删除函数语句类似,但是删除要求目标的前一个节点的指针与目标节点的指针都能知道;而查找要求则低多了。

因为这个原因,在加上我是先写的查找,所以删除中未调用查找函数。

按学号查找函数主体如下:

定义要查询学号变量

("请输入学号:

\n");

("")输入学号

()历遍链表

{

()此为调用函数,效果是查找到与目标相同的信息然后返回相应指针

()1(p)若查找到目标,输出

;

>传递指针,继续

}

按姓名查找函数主体如下:

[20]定义要查询姓名的变量

("请输入姓名:

\n");

("")输入姓名

()

{

()与上文中类似,返回同名目标的指针

()1(p)若查找到目标,输出

;

>传递指针

}

输出

函数名为,参数为链表头指针,无返回值。

函数作用就是沿链表依次输出学生信息。

函数主体为:

("全体学生数据如下:

\n");

(0){("无学生信息");}若节点为0则返回

*p;

;

()循环输出

{

("\n学号",(>));

("\n姓名",(>));

("\n学院",(>));

("\n专业",(>));

("\n省份",(>));

("\n地址",(>));

("\n电话号码\n",(>));

>;

}

 

3.3恢复区系统模块

恢复区系统(其名为)是为了显示被删除信息而建立的,在函数运行之初便建立了恢复区链表,头指针设为,与管理系统头指针相区别。

并且,被设为全局变量,方便被函数调用。

恢复区系统主要有查找、输出功能,其功能模块基本调用管理系统的函数,所以不再赘述。

而恢复区的输入函数,即管理区删除信息时将信息输入恢复区链表的函数,上文已提及,即,此为连接恢复区与管理系统的桥梁,只不过是单行的。

函数为:

(*p)将删除信息导入恢复区链表,p为要删除信息的指针

{

*p1,*p2;

p1恢复区链表头节点位置

(p1->)指针置于链表尾端

{p11->;}

p21;

p1=(*)()复制结构体信息

p1->>;

(p1->>);

(p1->>)复制字符数组,以下类似

(p1->>);

(p1->>);

(p1->>);

(p1->>);

p2->1;

p1->链表尾设为

}

以上程序函数模块基本介绍完毕,由于篇幅有限,很多函数模块只摘录了主体,若仍有疑惑处,可参考附录中的源代码。

 

3.4功能展示

主界面:

管理系统:

()

添加:

(*)

可连续添加

查找:

(*)

删除:

*(*)

按学号删除:

按姓名查询,可面对重名情况:

输出:

(*)

恢复区系统菜单:

()

文本形式保存:

(*[20])

 

 

删除信息导入恢复区链表:

(*p)

 

第四章:

实习总结

 

本次实习,我制作了两个版本的程序,一个是简版,一个是升级版。

其实,简版就是管理系统,升级版在简版的基础上还包含了恢复区系统。

这也算是实现了程序的升级吧,安全性方面算是达标了。

本次实习的不足主要有:

1.实用性不足。

程序中学生信息定义的是长整型,故范围有限,不能大于32756,否则就会溢出;如果定义为无符号的长整,也不过翻一番而已,并未增添多少位,我校学号可是有11位。

但这样方便比较给变量赋值,并且在查找中已有查找姓名字符串的应用了,用长整型丰富了查找类型;

其实完全可以定义学号为字符型数组,虽说浪费空间,但是方便输入较长数值,且比较也很方便,可以直接调用查找姓名字符串的函数。

2.程序中函数模块利用率不高,除了读取、存储、查找、输出这四个模块被两个系统调用外,其他删除、添加只有管理系统用到;倒是1这么一个输出单一节点信息的程序被调用多次;

3.函数模块十分庞大,很多程序语句充斥在其中,没有很好的分成几部分子函数,方便调用,这也导致了函数调用率不高;

4.因为思路原因,程序中有三个全局变量,不利于程序的移植,可移植性不高;

5.程序中查找模块与删除模块没有结合好,导致在删除中又查找了一遍;

说到底还是目标不一样,查找函数只要求目标节点的指针,而删除函数要前一个节点和目标节点的指针,而且链表是单向的,知道后一个节点但不能知道前一个节点。

若用双向链表,那样就可以将删除与查找较好的结合在一起了。

6.恢复区只有查找、输出功能,没有恢复与删除功能,如此只能添加不能删除,恢复区文件会越来越大;因为时间问题没有建立恢复函数,其实建立也不难,只是会与恢复区导入函数类似,再增加一全局变量而已;

7.使用链表所以未排序。

如果要给链表排序,可以在插入信息时就按顺序插入,但是这势必增加程序运行负担,而且效率不高,因为链表是单向的。

可以用二叉树,如果那样的话效率就高多了,但是二叉树我还不会。

8.程序视图就是C语言的黑框,没有美观可言。

的视图好一些,我也想过用编译一个窗口,然后在程序中调用。

但是还没学会,而且在调试程序的过程中遇到一些困难让我遗忘了这个想法,曾看程序看到凌晨两点,所以想法没有实践。

9.在软件技术普及的今天,做个数据库已是小菜一碟,很到软件可以使用,如,并且功能极其强大,比我花了几天时间做出来的高级不知多少倍。

与那些专业程序相比,我的这程序不值一提,也就是练习练习C语言而已。

 

第五章:

实习感受

 

此次实习在一个凉爽的夏日开始,这在武汉极反常。

因为我们考试基本考完了,只剩下一门英语了,所以实习时间比较充裕。

实习的题目也不算太难,思路很清晰,总共三步走:

1.读取文件;2.处理链表;3.保存文件。

操作的主体是链表,原以为会很轻松,但还是遇到很多问题,以前上课时从未想到过。

经历过基本一天都在看程序的时间,我发现我懂的太少,要学的太多。

对文件的操作我一直都没注意,现在才发现其乐无穷;以前觉得链表很难,现在轻松写出程序。

学习与实践果然是不可分割的。

实习中,大家八仙过海各显神通,用链表是比较传统的,而且节省内存,有的用数组,这也可以理解,方便使用,排序便利;有的直接用文件C语句查询、删除,让我大开眼界,文件还能这么用!

在写报告时看到一篇用指针数组做的程序,相当有意思。

发现水平还是不够,同学可以用C语言编出一个比较漂亮的界面,还可以随意调用文件操作,实在让人赞叹不已。

此次实习加强了我对链表的理解,很多以前迷糊的概念得到了明确,亦让我感到C语言强大之处,直接操作内存,实在很暴力。

一句诗概括此次实习,“山重水复疑无路,柳暗花明又一村”;如今C语言实习已然结束,但是对于计算机语言的学习决不能放松,“雄关漫道真如铁,而今迈步从头越”。

现在的世界是信息化的,我们现在对于的要求也很大,C语言也是其基础。

路漫漫其修远兮,吾将上下而求索。

感谢曹老师抽出时间将C语言实习提前和这八天来的指导,同时亦感谢大家这些天来的支持与帮助,此外额外感谢武汉夏天罕见的凉爽天气,感谢生活。

 

附录

 

参考书目

1.谭浩强著《C语言程序设计》2005年7月第3版298-299、300、302-303、338页

2.吴煌坚学长的实习报告

 

源代码

<>

<>

<>

0

()

()

学生信息结构体

{

学生学号

[20]学生姓名

[20]学院

[10]专业

[10]省份

[20]地址

[11]电话号码

};

带学生信息结构体的链表单位

{

;

*后续链表地址

};

记录节点个数

搜索个数,保证未搜索到时可显示没搜到

*方便全局调用恢复区链表

*(1[20])创建链表,从文件中读取数据,返回头指针

{

*链表头指针

*p1,*p2指针变量

p12=(*)();

*打开文件读取数据

(((1,"")))若文件不存在则建立文件

{

("暂无任何学生信息\n");

(1,"")建立文件

();

p1->;

(p1);

}

读取文件信息,建立链表

{

0此时无结点

1;

((&(p1->),1))

{

1;

(1)1给头结点赋值

p2->1加新的结构体

p21;

p1=(*)();

}

();

p2->尾结点处指针置0

();

}

}

(*[20])存储链表信息

{

*;

*p;

;

(,"")以二进制方式打开文件

(()(&(>),1))写入文件

{

>;

}

();

}

(*p)将删除信息导入恢复区链表

{

*p1,*p2;

p1恢复区链表头节点位置

(p1->)指针置于链表尾端

{p11->;}

p21;

p1=(*)()复制结构体信息

p1->>;

(p1->>);

(p1->>);

(p1->>);

(p1->>);

(p1->>);

(p1->>);

p2->1;

p1->;

}

(*[20])以文本形式将链表输入文件

{

*;

*p;

;

(,"w")以文本形式打开

()链表不到尽头不停止

{

(,"",(>))向文本文件中写入数据

(,"%10s",(>));

(,"%10s",(>));

(,"%10s",(>));

(,"%10s",(>));

(,"%10s",(>));

(,"%20s\n",(>));

>;

}

}

1(*p)输出单个学生结构体信息

{

("\n学号",(>));

("\n姓名",(>));

("\n学院",(>));

("\n专业",(>));

("\n省份",(>));

("\n地址",(>));

("\n电话号码\n",(>));

}

*(*[20])按姓名搜索

{

()

{

((>)0){(p);}若查找到目标,返回指针

>;

}

(0)("没有该学生信息");

()返回以保证返回值

}

*(*)按学号搜索

{

()

{

((>)){(p);}若查找到目标,返回指针

>;

}

(0)("没有该学生信息");

()返回以保证返回值

}

(*)添加信息

{

1给输入按钮赋初值

*p1,*p2建立结构体指针

p2;

(0)

{

("请选择:

\n输入0返回主菜单\n输入1继续\n");

("")输入按钮赋值

(0)判断是否返回主菜单

(0)链表无节点,给*填充数据

{

("\n学号(输入数值请小于32756):

")(""((>)));

("\n姓名:

")("",(>));

("\n学院:

")("",(>));

("\n专业:

")("",(>));

("\n省份:

")("",(>));

("\n地址:

")("",(>));

("\n电话号码:

")("",(>));

2->增加节点,节点数n加1,同时跳出此次循环,进入下一次

}

p1=(*)()输入信息

("\n学号(输入数值请小于32756):

")(""((p1->)));

("\n姓名:

")("",(p1->));

("\n学院:

")("",(p1->));

("\n专业:

")("",(p1->));

("\n省份:

")("",(p1->));

("\n地址:

")("",(p1->));

("\n电话号码:

")("",(p1->));

((p2->))移动指针到链表尾

{

p22->;

}

p2->1;移动指针

p21;

p2->;

节点数加1

}

}

(*)搜索信息

{

0;

(0){("此时无数据");}节点数为0状态

*p;

;

("请输入拟搜索信息:

\n");

("按姓名查找请按1\n按学号查找请按2\n")分类查找

0;

("")导入分类

(1)按姓名查找

{

[20];

("请输入姓名:

\n");

("")输入姓名

()

{

();

()1(p)若查找到目标,输出

;

>传递指针

}

}

(2)按学号查找

{

;

("请输入学号:

\n");

("")输入学号

()

{

();

()1(p)若查找到目标,输出

;

>传递指针

}

}

{("输入错误");}

}

*(*)删除信息

{

(0){("无学生信息")();}

0选择变量:

学号、姓名

("按姓名删除请按1\n按学号删除请按2\n")分类删除

("");

(2)按学号删除(学号默认唯一)

{

("请输入拟删除学生学号:

\n");

0;

("");

*p1,*p2;

p1;

(1->1->)1指向的学号不是要找的节点,并且后面还有节点

{p2111->;}1后移

(1->)找到目标

{

1(p1)(p1);

(p1)1->若p1指向头节点,将第二个节点位置赋予

p2->1->否则将下一结点位置赋给前一节点位置

;

}

("该学生不存在");

();

}

(1)按姓名删除(姓名可以重复)

{

00选择删除与否

[20];

*p1,*p2;

p12;

("请输入学生姓名:

\n");

("")输入学号

(p1)历遍链表

{

((1->)0)

{

1(p1)若符合姓名条件,显示信息

("删除该生信息?

\n删除选1\n按其它键不删除\n")保证达到目标姓名时显示学生信息,可选择不删除

("");

(1)

{p2111->;}不删除就再次循环

{

;

(p1);

删除数加一

(p1)1->删除信息

p2->1->更改指针,绕过目标

}

}

p2111->;

}

(0)("该生信息不存在")若未删除则视为未发现目标学生

();

}

{("输入错误")();}

}

(*)输出全部数据·数据

{

("全体学生数据如下:

\n");

(0){("无学生信息");}若节点为0则返回

*p;

;

()循环输

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2