程序设计实训
- 格式:doc
- 大小:429.50 KB
- 文档页数:19
实训一图书管理系统
实训目的:
1.掌握结构化程序设计的基本思想;
2.熟练掌握结构以及指针的设计和应用;
3.熟练掌握文件的存取方法;
4.了解综合系统设计的基本原理;
5.提高C语言程序设计的综合应用能力。
实训任务:
开发一个简单的图书管理系统,具体功能要求如下:
1.图书管理:增加图书、修改图书、删除图书、统计图书;
2.借阅管理:查找图书、借阅图书、归还图书、借阅图书统计;
3.读者管理:申请读者卡、删除读者卡、修改读者卡;
4.馆员管理:添加管理员、修改管理员信息、删除管理员。
根据以上功能说明,设计馆员信息、读者信息、读者卡信息、图书信息的存储结构,数据存储在文件中,界面要求有合理的提示,每个功能可以设立菜单,根据提示可以完成相关的功能要求。
实训设计:
1.基本数据结构设计:
2.系统结构设计:
系统结构设计说明了整个系统的功能模块结构以及调用关系,本设计采用自顶向下的结构化方法,将每个模块自顶向下展开。
3. 模块设计:
(1)主控模块
在该模块中,提供系统的主菜单,通过主菜单用户选择图书管理、借阅管理、读者管理、馆员管理和退出系统。
(2)其它
实训二链表的基本操作
一程序设计目的
1.掌握结构化程序设计的基本思想;
2.熟练掌握结构以及指针的设计和应用;
3.了解综合系统设计的基本原理;
4.掌握C语言程序的综合应用。
二程序设计任务内容
假设学生信息含有:学号、姓名、成绩。用户可以对学生记录进行建立、插入、删除、更新、查找和输出等管理操作。
要求用单链表表示一个班的学生信息,基本操作如下,用菜单形式实现这些功能(菜单要能重复使用):
1、建立单链表输入N个学生的学号、姓名、成绩,并建立成一个单链表。当输入学号
为0时,结束。
2、查找单链表输入学号,查找该学号的学生的基本信息,若存在,输出该学号的基本
信息(学号、姓名、成绩),不存在,输出查无此人的信息。
3、插入单链表输入要插入学生的基本信息(学号、姓名、成绩),将其插入到单链表的
末尾。
4、删除单链表输入要删除学生的学号,若链表中存在对应记录,将该结点删除,若不
存在该学号,则不作删除操作。
5、更新单链表输入要更新的学生的学号,若链表不为空,并且若存在对应学号,则用
新的成绩代替原来成绩,若不存在该学号,则不作更新操作。
6、逆置单链表将一个单链表按相反的顺序重新排列。
7、输出单链表按单链表的顺序输出各学生的信息。
0、退出系统算法结束
实训三通信录管理
实验要求
1.核心数据结构用到的结构体要采用动态内存分配和链表结构。家庭住址也要求存储在动态分配的内存中,以节约内存。内存的起始地址存储在结构体的成员指针addr中。
2.使用文件进行存储和管理。程序启动时可从文件中读取通信信息,或从键盘输入通信信息;运行过程中如添加或删除记录时也可对文件进行存取;退出前可选择将通信信息保存到文件中。
3.不同的功能使用不同的函数实现(模块化),对每个函数的功能和调用接口要注释清楚。对程序其它部分也进行必要的注释。
4.对系统进行功能模块分析、画出总流程图和各模块流程图。
5.用户界面要求使用方便、简洁明了、美观大方、格式统一。所有功能可以反复使用,最好使用菜单。
6.通过命令行相应选项能直接进入某个相应菜单选项的功能模块。
程序设计任务内容
该程序具有以下基本功能:
◆添加:增加一个或几个人的记录,并可选择继续输入或退出。
◆查询:可按姓名查找某人记录,也可查找某个组别的所有记录。若找到,则显示所有人的记录,否则提示未找到,无论查找成功否,应还可选择继续查找或退出。
◆删除:删除已输入的记录。输入姓名查找要删除的记录,若找到,提示是否确定删除,若选择是,则删除该人信息,若选择否,则取消;若没找到,提示无此人信息。
◆修改:修改某人的记录。输入姓名并查找,若找到,显示该人的所有信息,并可进行修改;否则提示无此人信息
◆排序:可分别按分组、编号或姓名进行排序。
添加功能:
◆登录模块:该模块在进入主界面之前先执行,用于对进入系统的用户进行身份验证,若用户输入正确的用户名及用户密码,则进入主界面,否则输入超过3次错误则退出程序。
◆系统帮助:显示开发者姓名、班级、开发完成日期、版本号和指导老师等信息。
详细设计说明
明确实验内容,进行需求分析后,开始着手设计系统用户数据结构和功能实现模块。
系统用户数据结构:
1、记录联系人通信信息的数据结构,包含编号、分组、姓名、固话、手机号、QQ号码、E-mail、家庭住址等信息
typedef struct k
{
long num; /* 编号 */
char group[16]; /* 分组 */
char name[16]; /* 姓名 */
char hphone[8]; /* 固话home_phone */
char mphone[12]; /* 手机号mobile_phone */
char qq[12]; /* QQ号码 */
char email[20]; /* e-mail地址 */
int len; /* 家庭住址或通信地址长度 */
address * addr; /* 家庭住址或通信地址 */
struct k *pre; /* 前向链表指针 */
struct k *next; /* 后向链表指针 */
}contact;
与常用数据结构的不同之处在于:
◆家庭住址在此结构体中采用的存储方式并非直接使用字符数组,取而代之的是字符型指针。并且同时多了一项附加内容,通信地址长度 int len。该长度可用函数strlen()求出,但是作为一结构体的成员应有其用意。考虑到联系人内容需及时修改和保存,涉及文件操作,其中fread(),fwrite()二进制读写函数参数均包含字符个数要求,len置于指针addr前用意可由此得出。
◆核心数据结构用到的结构体要求采用动态内存分配和链表结构,题中采用的是双向链表。我们知道进行链表删除操作必须知道该元素的前驱,单向链表需重新声明一指针,双向链表可省掉该操作直接通过 current->pre 实现。其便利之处具体体现在联系人的删除操作。