- 1、本文档共27页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构课程设计报告(附源代码)-学生管理系统.doc
课程设计报告(一)
报告题目:学生管理系统
实验目的:
熟悉线性链表,掌握线性链表的基本操作;
练习求线性表中指定结点元素及修改指定结点的元素、求指定结点的前驱/后继元素、删除指定结点的元素、在指点节点位置插入元素等。
通过文件保存和读取文件来提升文件操作的能力;
C语言编程能力的提升训练。
实验环境:C语言编程,VC++6.0编程工具实现。
软件系统结构
1.总体架构/层次:
学生管理系统
学生管理系统
(汉化版)
学生管理功能
数据存取处理
录入新学生信息/插入新学生数据
查找学生信息
删除学生信息
修改学生信息
显示全部学生信息
将学生信息存入文件(录入)
从文件读取学生数据(装入)
2.各功能的实现流程图:
函数1:录入功能实现流程图
开始
开始
输入新学生信息
按学号非降序插入到链表中
完成
函数4:删除功能实现流程图
开始
开始
输入要修改的学生学号
按学号查找该学生
找到了该学生信息?
修改
是
完成?Y/N
“不用修改”
否
返回主菜单
Y
N
函数2:查找功能实现流程图开始
开始
输入学生查找学号
按学号查找学生
找到记录?
是
完成查找?Y/N
显示该学生信息
Y
返回主菜单
N
否
函数3:删除功能实现流程图
开始
开始
输入要删除学生的学号
查找该学生
链表中存在?
是
删除该学生信息
删除完毕?Y/N
Y
N
返回主菜单
否
函数5:显示功能实现流程图
开始
开始
链表是否为空?
否
输出“无记录”
显示函数
输出全部记录
返回主菜单
是
函数6:文件装入功能实现流程图
开始
开始
输入文件名
打开文件成功?
按非降序插入链表
是
输出“打开文件失败”
输出“装入成功”
返回主菜单
否
函数7:文件保存功能实现流程图
开始
开始
输入文件名
打开文件成功?
是
写入文件
输出“存入成功”
输出“打开文件失败”
返回主菜单
否
函数8:退出菜单功能实现流程图
开始
开始
确定退出吗?Y/N
Y
t=0
/*t=1是菜单执行条件*/
退出
N
返回主菜单
结束
软件功能设计:
本软件是要编写一个学生管理系统,一个学生有很多相关数据,包括学号、姓名、性别、年龄、家庭住址、练习电话,因此我们利用线性链表的知识来编写程序,这是因为线性链表有很多优良的特点,因此该程序是对线性链表的应用练习。
本软件利用线性链表的特点,结合文件相关函数的运用,它能够实现以下功能:
用结点的数据域存放学生的学号、姓名、性别、年龄、家庭住址、练习电话;
利用结点的指针域访问某个结点的前驱或者后继;
录入新学生信息并按非降序插入到链表中;
查找给定学号的结点学生信息;
删除给定学号的结点学生信息;
修改给定学号的结点学生信息;
显示全部结点的学生信息;
将链表中的学生信息全部存入文件;
将已存在的学生信息文件中的学生信息按学号非降序插入到当前链表中;
六.源程序代码:
#includestdio.h
#includestring.h
#includestdlib.h
#includewindows.h
#define NAMELEN 15
#define ADDRLEN 10
#define TELLEN 15
#define OVERFLOW 0
#define ERROR 0
#define FALSE 0
#define OK 1
#define TRUE 1
struct stud
{ long num;
char name[NAMELEN+1];
char sex;
int age;
char Addr[ADDRLEN+1];
long rxsj;
char lxfs[TELLEN+1];
};
typedef stud ElemType;//链表结点元素为结构体
FILE *fp;
typedef struct LNode
{
ElemType data;
LNode *next;
} *LinkList;
//typedef LNode *;
int InitList(LinkList L)
{ //操作结果:构造一个空的线性表L
L=(LinkList )malloc(sizeof(LinkList));//产生头结点,并使L指向头结点
if(!L)//存储分配失败
exit(OVERFLOW);
L-next=NULL;// 指针域为空
return OK;
}
int ListTraverse(LinkList L,void(*vi)(ElemType))
{//条件:线性表已存在
//操作结果:一次对L的每个数据元素调用函数vi()。一旦vi()失败,则操作失败
LinkList p=L-next;
while(p)
文档评论(0)