数据库课程设计
“数据库课程设计”是数据库系统及应用课程的后续实验课,是进一步巩固学生的数据库知识,加强学生的实际动手能力和提高学生综合素质。
一、 课程设计目的
课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生适应实际,实践编程的能力。课程设计的目的:
1. 加深对数据库原理、程序设计语言的理论知识的理解和应用水平;
2. 在理论和实验教学基础上进一步巩固已学基本理论及应用知识并加以综合提高;
3. 学会将知识应用于实际的方法,提高分析和解决问题的能力,增强动手能力;
4. 为毕业设计和以后工作打下必要基础。
二、课程设计要求
运用数据库原理的基本理论与应用知识,在微机RDBMS(SQL Server)的环境上建立一个数据库应用系统。要求把现实世界的事物及事物之间的复杂关系抽象为信息世界的实体及实体之间联系的信息模型,再转换为机器世界的数据模型和数据文件,并对数据文件实施检索、更新和控制等操作。
1. 用E-R图设计选定题目的信息模型;
2. 设计相应的关系模型,确定数据库结构;
3. 分析关系模式各属于第几范式,阐明理由;
4. 设计应用系统的系统结构图,确定系统功能;
5. 通过设计关系的主码约束、外码约束和使用CHECK实现完整性控制;
6. 为参照关系设计插入、删除、修改触发器;
7. 实现应用程序设计、编程、优化功能;
8. 对系统的各个应用程序进行集成和调试,进一步优化系统功能、改善系统用户界面完成实验内容所指定的各项要求;
9. 分析遇到的问题,总结并写出课程设计报告;
10. 自我评价
三、实验环境
开发环境VC++、C#、ASP或JAVA;ODBC/JDBC;数据库SQL Server
四、上机实现内容
1. 创建数据库的结构
2. 创建各基本表的结构
3. 编制系统各功能模块,完成数据的管理(增、删、改)及统计查询。对于程序运行界面不做考核的重点。
五、课程设计考核
1.对学生到实验室的情况进行不定时统计;
2.出勤率+课程设计报告+课程设计所开发的应用系统+其他(上机抽查和提问)=综合评定成绩。
3.课程设计结束时请将下列资料上交:
(1) 课程设计报告;
(2) 所开发的应用系统的源程序、安装和使用说明;
(3) 将(1)(2)中的资料压缩成一个压缩包,压缩包文件的命名规则:班级+学号(末2位)+姓名(例如:计科090101王鹏晓);
(4) 班长将本班每人的(3)中的压缩包刻录成光盘连同打印的课程设计报告收齐,交给任课教师。
附录﹑课程设计题目
题目1:课程设计选题管理系统(1,24)
包括三大模块:
课程设计题目维护与查询:题目的添加、修改和删除;按题目类型、名称和关键字查询以及已选与未选题目的查询;
学生信息维护与查询;
学生选题维护与管理:学生选题及查询;
具体功能细化:
前台学生选题:学生上网登录系统进行选题;
前台教师出题:
教师添加、修改和删除题目;
教师确认学生的选题;
后台管理出题和选题
添加用户及权限
题目2:书店管理系统(23)
包括四大模块:
售书(图书销售管理及销售统计,查询)
进书(通过书目,向发行商下定单订购图书)
库存(图书库存,统计)
相关查询
题目3:图书馆管理系统(11)
包括四大模块:
图书的查询
借书
还书
图书的预约
题目4:库存管理系统(8)
包括四大模块:
商品目录建立
商品入库管理
商品出库管理
商品库存查询
题目5:工资管理系统(1 人)41
包括四大模块:
系统数据初始化
员工基本信息数据的输入、修改、删除;
员工个人信息及工资表的查询;
员工工资的计算;
参考数据如下:
员工基本状况:包括员工号、员工姓名、性别、所在部门、工资级别、工资等级等。
工资级别和工资金额:包括工资等级、工资额。
企业部门及工作岗位信息:包括部门名称、工作岗位名称、工作岗位工资等。
工龄和工资金额:包括工龄及对应工资额。
公司福利表:包括福利名称、福利值。
工资信息:包括员工号、员工姓名、员工基础工资、员工岗位工资、员工工龄工资、公司福利、员工实得工资。
题目6:酒店客房管理系统 (1 人)14,26
包括四大模块:
前台操作:包括开房登记、退房结账和房状态查看
预订管理:包括预订房间、预订入住和解除预订
信息查询:包括在住客人列表、预订客人列表和历史客人列表
报表统计:包括开房记录统计、退房结账和预订房间统计
员工基本信息数据的输入、修改、删除;
参考数据如下:
住店管理:客人姓名、证件号码、房号、入住时期、预计离开日期、结账离开日期、应付金额
客人信息:姓名、性别、证件类型、证件号码、联系电话
房间信息:房号、房类型、价格、押金、房状态 预订房间
客人姓名、性别、房类型、房号、价格、证件类型、证件号码、联系电话、入住日期、预计离开日期、历史信息
题目7:旅行社管理信息系统(1 人)3
包括如下模块:
旅游团队、团队团员及旅游路线相关信息的输入
旅游团队、团队团员及旅游路线相关信息的维护(修改、浏览、删除和撤销)
旅游团队管理信息的查询(如按团队编号)
团队团员基本情况的查询(可选多种方式)
旅游路线相关信息的查询(如按线路编号)
旅游路线排行榜发布。
数据备份,更改密码。
参考数据如下:
团员信息表(路线编号,团队编号,团员编号,姓名,性别,电话,通信地址,身份证号码, 团费交否,备注)
线路信息表(路线名称,团费,简介,图形,路线编号)
团队信息表(团队编号,路线编号,团员人数,出发日期,返程日期)
旅游团队信息表(团队编号,团队负责人,团员人数,建团时间,是否出发,团费,盈亏)
密码信息(操作员,密码)
题目8:报刊订阅管理系统 (1 人)25,35
包括如下模块:
登录功能:登录统为身份验证登录。分为管理员登录和一般用户登录。分别通过不 同的用户名和密码进入报刊订阅管理界面,新的用户需要注册。
录入新信息功能:对于管理员,包括新用户信息和新报刊信息的录入功能,信息一旦 提交就存入到后台数据库中;普通用户自行注册进行可以修改个人信息。
订阅功能:用户可以订阅报刊,系统自动计算所需金额,并显示在界面上;管理员不 可订阅报刊,必须以用户身份订阅报刊。
查询功能:用户可以查询并显示自己所订阅的信息;管理员可以按人员、报刊、部门 分类查询。查询出的信息显示在界面上,并且可以预览和打印出结果。
统计功能:管理员可以按用户、部门、报刊统计报刊的销售情况,并对一些重要的订 阅信息进行统计;普通用户可以统计出自己的订阅情况,并且可以预览和打印出结果。
系统维护功能:数据的安全管理,主要是依靠管理员对数据库里的信息进行备份和恢 复,数据库备份后,如果出了什么意外可以恢复数据库到当时备份的状态,这提高了系统和 数据的安全性,有利于系统的维护
参考数据如下:
管理员表(Adminuser) :管理员名、密码。
部门表(Department) :部门号,部门名。
用户表(Users) :用户账号、密码、真实姓名、身 份证号、联系电话,联系地址,部门号(和部门表有关)等。
报刊类别表(NewspaperClass) :分类编号、 分类名称。
报刊信息表(Newspaper) :报刊代号、报刊名称、出版 报社、出版周期、季度报价、内容介绍、分类编号(和报刊类别表有关)等。
订单表(Order) :订单编号、用户编号、报刊代号、订阅份数、订阅月数等。
题目9:计算机等级考试教务管理系统(2 人)32
包括四大模块:
用户设置:对考点代码,考点名称进行设置,设置用户与密码;系统复位:即清除上一次考试数据(在之前存入历史)
报名管理: 报各库录入(姓名不能不空,之间不能有空格) 增加、删除、修改、浏览
准考证管理:准考证生成规则:xxx+yy+zz+kk,其中 XXX 为考点代码;YY 为语言代码,XX 为考场号,KK 为座位号 同一级别、语言应根据报名初始库信息按随机数生成准考证,同一考点最多可有 99*30=2970 名考生;如已生成准考证号,再重新生成准考证号,应该给予提示。 准考证打印
考务管理:考生信息查询、浏览、打印
成绩管理:成绩数据录入、接收 成绩合成(总成绩=笔试成绩*0.6+上机成绩*0.4),按大于或等于 60 合格
参考数据如下:
初始报名表(准考证号(为空) ,报名号(主键) ,级别+语言种类(外键) ,姓名,性别, 出生年份,民族,身份证号,联系地址,联系电话,照片,备注,参加培训)
含准考证号的报名表(准考证号(为主键) ,报名号,级别+语言种类(外键) ,姓名,性别, 出生年份,民族,身份证号,联系地址,联系电话,照片,备注,参加培训)
成绩表(准考证号,笔试成绩,上机成绩,总成绩) 级别语言代码表(级别语言代码,级别+语言)
用户信息表(考点代码,考点名称,用户名,密码)
题目10:人事管理系统(1 人)21
包括四大模块:
登录管理:包括操作员管理,口令设置,权限管理
人员管理:包括人事数据维护、人事信息查询和人事信息统计
工资管理
部门管理:包括部门表,职称表和年份表
查询及报表打印
参考数据如下:
人事表(编号,姓名,性别,出生日期,工作日期,部门代码,职称,婚否,简历,相片)
工资表(基本工资,岗位津贴,奖励,应发工资,水电,保险,实发工资)
部门表(代码,部门名称)
职称表(职称代码,职称名称)
年份表(年份代码,年份名称)
操作员表(操作员代码,操作员姓名,口令,部门,电话)
系统日志表(操作员代号,操作员姓名,登录时间,离开时间)
题目11:商品销售管理系统(1 人)19
包括四大模块:
用户登录
基本信息管理:包括销售情况、商品信息、库存表、员工表等信息的录入、浏览、修改、撤销、删除和查询等
商品销售管理:包括商品售出、退回和入库
盘点:包括库存盘点、当日销售盘点
参考数据如下:
商品信息表(商品编号,商品名称,品牌,型号,销售单价) 商品编号=类别代码(1 位)+品名代码(1 位)+品牌代码(2 位)+型号代码(2 位)
销售情况表(成交编号,商品编号,销售数量,总金额,销售日期,员工编号)
库存表(商品编号,供货商编号,进货日期,进货价,库存数量)
员工表(员工编号,员工姓名,性别,基本工资,职务,密码)
供货商表(供货商编号,供货商名称,所在地,联系电话)
员工资料表(员工编号,员工姓名,是否党员,简历,照片)
题目12:学生成绩管理系统(1 人)29
包括四大模块:
基本数据管理:包括院系管理,专业管理(设置院系下面的专业),班级管理(设置专业下面的班级),课程管理(设置相应专业下面的课程)
学生信息管理:包括基本信息录入、基本信息修改
学生成绩管理:包括学生成绩录入、学生成绩修改
信息查询:包括基本信息查询、成绩信息查询、学校人数统计
系统管理:用户管理、数据备份和系统帮助
参考数据如下:
院系信息(院系代码,院系名称)
院系专业信息(班级、院系代码,专业)
学生基本信息(班号,学号,姓名,性别,出生年月,籍贯,政治面貌,身份证号,入学年月,家庭地址,邮政编码,图片信息,备注)
学生成绩表(学号,课号,成绩,备注)
课程表(课号,课程名称,学期,备注)
班表(班号,班级名称)
用户信息表(用户名,密码,用户标识)
题目13:火车售票管理系统(4 人)36
包括四大模块:
售票管理
订票管理
信息查询
系统维护
参考数据如下:
车次信息表(车次,始发站,终点站,发车时间,到达时间)
订票信息表(车次,座位号,发车时期,发车时间,座位等级,票价)
车次座位等级分配及座位占用表(车次,座位号,座位等级,票价,占用标志)
用户信息表(用户名,密码,用户标识)
题目14:小型物业管理系统(1 人)
包括四大模块:
房源管理:对原始资料的录入、修改、查询和刷新。一般用户可以查询与房间有关 的统计资料;物业主管可其进行增、删、改、插等操作
租房管理:对房产出租,退租以及租房面积调整。其中物业主管可对其进行房租金 额计算和收款操作,一般用户对其查询
水电处理:根据租房资料,结合当月水、电量进行分摊,完成应收水电费。其中物 业主管对其进行计算,其他查询
交款处理:提供收款和发票打印以及交款数据查询
查询处理:对租房资料、交款资料,发票资料进行查询
参考数据如下:
房源资料(名称,面积,月租,物业,仓库)
租房资料(名称,面积,单位,月租,物业,押金,仓库)
水电资料(单位,电量,水量,电费,水费)
交费资料(收费项目,应收日期,应收金额,已收金额,未收金额,本次收款)
发票资料(单位,房租,电费,水费,物业)
权限资料(用户,密码,房源管理,租房管理,水电管理,交费管理,发票管理,系统维护) 其中系统管理员,有权进行系统维护;单位内部物业主管,有权进行物业资源调配、单元出 租,退租和收款开票操作;物业管理员,有权进行水电处理和收款处理等操行;租户代表, 有权进行种类费的查询操作
题目15:机房收费管理系统(1 人)7,34
包括四大模块:
登录模块
上机管理模块 说明:上机登记时,余额不足 3 元或卡处于挂失状态,则拒绝登记 每位同学的一次上机形成一条记录,每 36S 遍历一次上机记录表,对表中所有正上机字段为 TRUE 的记录的上机用时增加 36S,同时从上机卡表的余额减少
上机卡管理模块
充值挂失模块
查找统计模块:统计某天上机的总时数、每次上机的平均时数和机房的收入;某学 生上机的次数、上机总时数、每次上机平均时间;挂失和查询余
参考数据如下:
上机卡(卡号,姓名,专业班级,余额,状态) 状态的取值有:正常(能自费上机)
挂失上机记录(卡号,上机日期,开始时间,上机用时,正上机,管理号代码),上机用时记录学生上机时间(S);正上机是一个布尔型,为 True 表示正上机,每 36 秒刷新 其上机用时并扣除上机费用,为 False 表示上机结束。上机记录表永久保存,用于事后查询 和统计 管理员(代码,姓名,口令)
题目16:高校药房管理(1 人)31
包括四大模块:
基础数据处理:包括医生和药剂师名单的录入,修改,删除及查询
营业数据处理:包括药品进货上柜,处理划价,配药,柜存药品查询,处方综合查 询,交接班结转清。
参考数据如下:
药品信息表(货号,货名,计量单位,进货数量,进货单价,出售单价,进货日期,收货人 和供应商)
处方信息(编号,患者姓名,医生姓名,药剂师姓名,处方日期,配药日期) 处方药品信息(处方编号,药品货号,计量单位,配药数量,销售单价,已配药否)
医生名单和药剂师名单表(姓名)
题目17:考勤管理系统(2 人)40
包括四大模块:
记录每个员工每天所有进入公司的时刻和离开公司的时刻。
每天结束时自动统计当天的工作时间
每天结束时自动统计当天迟到或早退的次数。
对于弹性工作制,每天结束时自动统计当月的工时,并自动算出当月欠缺或富余的 时间
每个月末统计该月的工作时间判断是束足够
每个月末统计该月的工作天数并判断是否足够
管理人员查询并修改工作时间(特殊情况下修改)
管理人员账户管理(如设置密码等)
管理人员设定早退及迟到的条件,每个月的工作时间
管理人员设定每个月的工作日期及放假日期
参考数据如下:
员工信息(工号,姓名,年龄,入职时间,职位,性别,密码)
配置信息(上班时间小时,上班时间分钟,下班时间小时,下班时间分钟,每天工作时间)
每月统计数据表(工号,姓名,剩余的时间,迟到的次数,早退的次数,工作天数)
每天统计信息表(工号,姓名,小时,分钟,动作,时间) 其中动作指的时入或离开公司
题目18:单位房产管理系统(2 人)33,10
包括四大模块:
系统模块:完成数据库维护、系统关闭功能
物业费用模块:完成本月物业的计费、历史资料查询和财务部门接口传送数据、物 业相关费用单价设置
房屋资源模块:对房屋资源进行添加、列表显示、查询
职工信息模块:对职工进行添加、列表显示、查询以及相应部门、职务进行维护
帮助模块:对用户使用本系统提供在线帮助
参考数据如下:
职工(编号,姓名,性别,参加工作时间,行政职务,专业技术职务,评上最高行政职务时 间,评上最高专业技术职务时间,双职工姓名,现居住房号,档案号,房产证号,所在部门 编号,是否为户主)
部门(编号,部门名称) 住房级别表(编号,级别,住房标准,控制标准,级别分类)
房产情况(编号,房号,使用面积,现居住人 id,上一个居住人 id,最早居住人 ID,阳台面积)
物业费用(编号,房号,水基数,水现在值,电基数,电现在值,燃气基数,燃气现在值, 当前年份,当前月份)
价格标准(编号,水单价,电单价,燃气单价)
题目19:标准化考试系统 (2 人)15,39
功能要求: 设计一个简单的标准化考试系统,仅有单项选择题、多项选择题和判断题功能即可。
包括四大模块:
题库管理:实现试题的录入、修改、删除功能;
考试子系统:能够实现考生做题、结果自动存入到数据库中,有时间提示;
选择身份(登录)功能:系统能够记录考生输入的登录信息及交卷信息;
自动评分功能:考生交卷后能自动评分;
查看成绩功能:能够查询考生相关信息(包含成绩等)。
参考数据如下:
其它可供选择的题目:
网上教务评教系统130,127,133 16
学生日常行为评分管理系统232,110,230
网上鲜花店 38
基于BS结构的工艺品销售系统12
基于BS结构的校园二手物品交易网站 37
大学生就业管理系统201,208,234
题库及试卷管理系统
数据库原理及应用
课程设计报告
题目: 课程设计选题管理系统
所在学院:
班 级:
学 号:
姓 名: 李四
指导教师:
2011年12月 日
目录
一、 概述
二、需求分析
三、概念设计
四、逻辑设计
五、系统实现
六、小结
一、概述
求具体的数据结构实验报告:将若干城市的信息存入一个带头结点的单...
#include #include typedef int Length; typedef struct { int x; int y; }coordinate; typedef struct cityInfo { char cityName[10]; coordinate cityCoor; struct cityInfo* next; }citylink; void addCity(citylink*); void insertCity(citylink*); void delCity(citylink); void amendCity(char*); void list(void); void coordinateSureCityname(void); void nearerCity(coordinate,Length); void shortestCitys(void); citylink *head; citylink *end; void addCity(citylink* newCity) { end-> next = newCity; end = newCity; newCity-> next = NULL; } void insertCity(citylink* newcity) { int number,i; citylink *p,*q; p = head; printf( "insert where "); scanf( "%d ",&number); for(i = 1;i next; } q = p-> next; p-> next = newcity; newcity-> next = q; } void delCity() { int number,i; citylink *p; p = head; printf( "please input the number of city you want to del "); scanf( "%d ",&number); if(1 == number) { head = head-> next; } for(i = 2;i next; } p-> next = p-> next-> next; } void amendCity() { int x,y,result; citylink *p; char cityName[10]; printf( "please in put city 's old name "); scanf( "%s ",cityName); fflush(stdin); p = head; while (p) { result = strcmp(p-> cityName,cityName); if (0 == result) { printf( "please input city 's new name!! "); scanf( "%s ",&p-> cityName); fflush(stdin); printf( "please input city 's new coordinate like this 88,99!! "); scanf( "%d,%d ",&x,&y); p-> cityCoor.x = x; p-> cityCoor.y = y; break; } p = p-> next; } if (result != 0) { printf( "There have not this city "); } } void coordinateSureCityname(void) { int result; citylink *p; char cityName[10]; p = head; printf( "please in put city 's name "); scanf( "%s ",cityName); fflush(stdin); while (p) { result = strcmp(p-> cityName,cityName); if (0 == result) { printf( "city 's coordinate is %d,%d ",p-> cityCoor.x,p-> cityCoor.y); } p = p-> next; } if (result != 0) { printf( "There has not such city "); } } void nearerCity() { citylink* p; int temp,x,y; coordinate coord; int Length; printf( "please input coordinate like this 88,99 "); scanf( "%d,%d ",&x,&y); coord.x = x; coord.y = y; fflush(stdin); printf( "please input length "); scanf( "%d ",&Length); p = head; while(p) { temp = sqrt(pow((coord.x - p-> cityCoor.x),2) pow((coord.y - p-> cityCoor.y),2)); if (temp cityName); } p = p-> next; } } void list(void) { citylink *p; p = head; while(p) { printf( "city 's name = %s,citys coordinate = %d , %d ",p-> cityName,p-> cityCoor.x,p-> cityCoor.y); p = p-> next; } } void main(void) { citylink city1; citylink city2; citylink city3; citylink city4; citylink city5; citylink city6; citylink city7 head = &city1; city1.cityCoor.x = 12; city1.cityCoor.y = 22; strcpy(city1.cityName, "city1 " ); city1.next = &city2; city2.cityCoor.x = 28; city2.cityCoor.y = 95; strcpy(city2.cityName, "city2 " ); city2.next = &city3; city3.cityCoor.x = 32; city3.cityCoor.y = 17; strcpy(city3.cityName, "city3 " ); city3.next = &city4; city4.cityCoor.x = 58; city4.cityCoor.y = 98; strcpy(city4.cityName, "city4 " ); city4.next = &city5; city5.cityCoor.x = 31; city5.cityCoor.y = 67; strcpy(city5.cityName, "city5 " ); city5.next = &city6; city6.cityCoor.x = 21; city6.cityCoor.y = 99; strcpy(city6.cityName, "city6 " ); city6.next = NULL; head = &city1; end = &city6; city7.cityCoor.x = 19; city7.cityCoor.y = 84; strcpy(city7.cityName, "city7 " ); list(); printf( " "); }
数据结构实验报告
#include //头文件#include #include typedef struct BiTNode{ char data; struct BiTNode *lchild,*rchild;} BiTNode,*BiTree;//定义结点类型typedef struct QNode{ BiTNode data; struct QNode *next; } //定义队列的节点类型QNode,*QueuePtr;typedef struct{ QueuePtr front; QueuePtr rear; }LinkQueue;//队列void InitQueue(LinkQueue *Q)//创建队列{ Q->front=Q->rear=(QueuePtr)malloc(sizeof(QNode)); Q->front->next=NULL;}void EnQueue(LinkQueue *Q,BiTNode e)//将元素入队{ QueuePtr p; p=(QueuePtr)malloc(sizeof(QNode));//为结点开辟空间 p->data=e; p->next=NULL; Q->rear->next=p; Q->rear=p;}BiTNode DeQueue(LinkQueue *Q)//将元素出列并返回元素的值。
{ BiTNode e;QueuePtr p; p=Q->front->next; e=p->data; Q->front->next=p->next; if(Q->rear==p) Q->rear=Q->front; free(p);//释放节点 return (e);}int QueueEmpty(LinkQueue *Q)//判断队列是否为空{ if(Q->front==Q->rear ) return 1; else return 0;}BiTree CreateBiTree()//创建树{ char p;BiTree T; scanf("%c",&p); if(p==' ') T=NULL; else { T=(BiTNode *)malloc(sizeof(BiTNode));//为结点开辟空间 T->data=p; T->lchild=CreateBiTree(); T->rchild=CreateBiTree(); } return (T);}void PreOrder(BiTree T)//先序{ if(T!=NULL) { printf("%c",T->data); PreOrder(T->lchild); PreOrder(T->rchild); }}void InOrder(BiTree T)//中序{ if(T!=NULL) { InOrder(T->lchild); printf("%c",T->data); InOrder(T->rchild); }}void PostOrder(BiTree T)//后序{ if(T!=NULL) { PostOrder(T->lchild); PostOrder(T->rchild); printf("%c",T->data); }}void LevelOrder(BiTree T)//层次遍历 { LinkQueue Q; BiTNode p; InitQueue(&Q); EnQueue(&Q,*T); while(!QueueEmpty(&Q)) { p = DeQueue(&Q); printf("%c",p.data); if(p.lchild!=NULL) EnQueue(&Q,*(p.lchild)); if(p.rchild!=NULL) EnQueue(&Q,*(p.rchild)); }}int Depth(BiTree T)/* 深度 */ { int num1,num2; if(T==NULL) return(0); num1=Depth(T->lchild); num2=Depth(T->rchild); if(num1>num2) return(num1+1); else return(num2+1); }void main()//主函数{ BiTree Ta;int num; Ta=CreateBiTree(); printf("先序遍历:"); printf("\n"); PreOrder(Ta); printf("\n"); printf("中序遍历:"); printf("\n"); InOrder(Ta); printf("\n"); printf("后序遍历:"); printf("\n"); PostOrder(Ta); printf("\n"); printf("层次遍历:"); printf("\n"); LevelOrder(Ta); printf("\n"); num=Depth(Ta); printf("深度为:%d",num);}为你量身定做的,开始要创建树,如果不会输入可以问我哦。
数组实验报告数据结构及算法描述怎么写
1、一元稀疏多项式相加 详细设计 4.1 程序头的设计: #include #include typedef struct pnode {int coef;/*系数 */ int exp;/*指数 */ struct pnode *next;/*下一个指针*/ }pnode; 4.2 用头插法生成一个多项式,系数和指数输入0时退出输入 pnode * creat() {int m,n; pnode *head,*rear,*s; /*head为头指针,rear和s为临时指针*/ head=(pnode *)malloc(sizeof(pnode)); rear=head; /*指向头*/ printf("input coef:");/*输入系数*/ scanf("%d",&n); printf("input exp:");/*输入指数*/ scanf("%d",&m); while(n!=0)/*输入0就退出*/ {s=(pnode *)malloc(sizeof(pnode)); s->coef=n; s->exp=m; s->next=NULL; rear->next=s;/*头插法*/ rear=s; printf("input coef:");/*输入系数*/ scanf("%d",&n); printf("input exp:");/*输入指数*/ scanf("%d",&m); } head=head->next;/*第一个头没有用到*/ return head; } 4.3 显示一个多项式 void display(pnode *head) {pnode *p;int one_time=1; p=head; while(p!=NULL)/*不为空的话*/ { if(one_time==1) {if(p->exp==0)/*如果指数为0的话,直接输出系数*/ printf("%d",p->coef); /*如果系数是正的话前面就要加+号*/ else if(p->coef==1||p->coef==-1) printf("x^%d",p->exp);/*如果系数是1的话就直接输出+x*/ /*如果系数是-1的话就直接输出-x号*/ else if(p->coef>0)/*如果系数是大于0的话就输出+系数x^指数的形式*/ printf("%dx^%d",p->coef,p->exp); else if(p->coefcoef,p->exp); one_time=0; } else{ if(p->exp==0)/*如果指数为0的话,直接输出系数*/ {if(p->coef>0) printf("+%d",p->coef); /*如果系数是正的话前面就要加+号*/ } else if(p->coef==1) printf("+x^%d",p->exp); else if(p->coef==-1) printf("x^%d",p->exp);/*如果系数是1的话就直接输出+x号*/ else if(p->coef>0)/*如果系数是大于0的话就输出+系数x^指数的形式*/ printf("+%dx^%d",p->coef,p->exp); else if(p->coefcoef,p->exp); } p=p->next;/*指向下一个指针*/ } printf("\n"); 4.4 两个多项式的加法运算 pnode * add(pnode *heada,pnode *headb) {pnode *headc,*p,*q,*s,*r; /*headc为头指针,r,s为临时指针,p指向第1个多项式并向右移动,q指向第2个多项式并并向右移动*/ int x; /*x为系数的求和*/ p=heada; /*指向第一个多项式的头*/ q=headb; /*指向第二个多项式的头*/ headc=(pnode *)malloc(sizeof(pnode)); r=headc; /*开辟空间*/ while(p!=NULL&&q!=NULL) /*2个多项式的某一项都不为空时*/ {if(p->exp==q->exp)/*指数相等的话*/ {x=p->coef+q->coef;/*系数就应该相加*/ if(x!=0)/*相加的和不为0的话*/ {s=(pnode *)malloc(sizeof(pnode));/*用头插法建立一个新的节点*/ s->coef=x; s->exp=p->exp; r->next=s; r=s; } q=q->next;p=p->next; /*2个多项式都向右移*/ } else if(p->expexp)/*p的系数小于q的系数的话,就应该复制q接点到多项式中*/ {s=(pnode *)malloc(sizeof(pnode)); s->coef=q->coef; s->exp=q->exp; r->next=s; r=s; q=q->next;/*q向右移动*/ } else/*p的系数大于q的系数的话,就应该复制p接点到多项式中*/ {s=(pnode *)malloc(sizeof(pnode)); s->coef=p->coef; s->exp=p->exp; r->next=s; r=s; p=p->next;/*p向右移动*/ } } 当第2个多项式空,第1个数不为空时,将第一个数剩下的全用新节点产生 while(p!=NULL) {s=(pnode *)malloc(sizeof(pnode)); s->coef=p->coef; s->exp=p->exp; r->next=s; r=s; p=p->next; } 当第1个多项式空,第1个数不为空时,将第2个数剩下的全用新节点产生 while(q!=NULL) {s=(pnode *)malloc(sizeof(pnode)); s->coef=q->coef; s->exp=q->exp; r->next=s; r=s; q=q->next; } r->next=NULL; /*最后指向空*/ headc=headc->next;/*第一个头没有用到*/ return headc;/*返回头接点*/ 4.5 两个多项式的减法运算,和加法类似,不同的地方已经注释 pnode * sub(pnode *heada,pnode *headb) {pnode *headc,*p,*q,*s,*r; int x; p=heada;q=headb; headc=(pnode *)malloc(sizeof(pnode)); r=headc; while(p!=NULL&&q!=NULL) {if(p->exp==q->exp) {x=p->coef-q->coef;/*系数相减*/ if(x!=0) {s=(pnode *)malloc(sizeof(pnode)); s->coef=x; s->exp=p->exp; r->next=s; r=s; } q=q->next;p=p->next; } else if(p->expexp)/*p的系数小于q的系数的话*/ {s=(pnode *)malloc(sizeof(pnode)); s->coef=-q->coef;/*建立的接点的系数为原来的相反数*/ s->exp=q->exp; r->next=s; r=s; q=q->next; } else {s=(pnode *)malloc(sizeof(pnode)); s->coef=p->coef; s->exp=p->exp; r->next=s; r=s; p=p->next; } } while(p!=NULL) {s=(pnode *)malloc(sizeof(pnode)); s->coef=p->coef; s->exp=p->exp; r->next=s; r=s; p=p->next; } while(q!=NULL) {s=(pnode *)malloc(sizeof(pnode)); s->coef=-q->coef;/*建立的接点的系数为原来的相反数*/ s->exp=q->exp; r->next=s; r=s; q=q->next; } r->next=NULL; headc=headc->next; return headc; 4.6 界面设计: printf("\n ****************************************\n"); printf("\n ************** 03 Computer *************\n"); ...
数据结构 线性表操作《实验报告》,有人会吗
您好,一般使用链表来描述。
优点:对于新增和删除操作add和remove和方便。
不需要移动元素。
缺点:不方便随机访问元素,LinkedList要移动指针代码实现:// Test.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include #include "stdlib.h" //宏定义 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 #define LT(a,b) ((a)next=NULL; //建立一个带都节点的空链表 return OK; /* 需要改变指针的指针,所以参数必须是引用或者是 *L: (*L) = (Lnode *)malloc(sizeof(Lnode)); (*L)->next=NULL; return 1; */ } /************************************************************************/ /* 创建链表 */ /************************************************************************/ void createList(LinkList L, int n){ /*单链表的初始化*/ if (!L) { initList(L); } ElemType data; LinkList p,q = L; printf("输入节点数据的个数%d:\r\n", n); for(int i = 0; idata = data; p->next = q->next; q->next = p; q = p; } } /************************************************************************/ /* 在第i位置插入e */ /************************************************************************/ Status insertList(LinkList L, ElemType e, int i){ LinkList s, p = L; int j = 0; while (p && jnext; j++; } if (!p ||j >i) return ERROR; s = (LinkList) malloc(sizeof(LNode)); //生成新节点 s->data = e; s->next = p->next; //插入L中 p->next = s; return OK; } /************************************************************************/ /* 删除第i位置元素,并用e返回其值 */ /************************************************************************/ Status deleteListElem(LinkList L, int i, ElemType &e){ LinkList p, q; int j = 0; p = L; while (p && jnext; ++j; } if (!p->next || j>i) return ERROR; //删除的位置不对 q = p->next; p->next = q->next; e = q->data; free(q); //释放节点 return OK; } /************************************************************************/ /* 插入排序 */ /************************************************************************/ void InsertSort(LinkList L) { LinkList list; /*为原链表剩下用于直接插入排序的节点头指针*/ LinkList node; /*插入节点*/ LinkList p; LinkList q; list = L->next; /*原链表剩下用于直接插入排序的节点链表*/ L->next = NULL; /*只含有一个节点的链表的有序链表。
*/ while (list != NULL) { /*遍历剩下无序的链表*/ node = list, q = L; while (q && node->data > q->data ) { p = q; q = q->next; } if (q == L) { /*插在第一个节点之前*/ L = node; } else { /*p是q的前驱*/ p->next = node; } list = list->next; node->next = q; /*完成插入动作*/ } } /************************************************************************/ /* 合并两个线性表 */ /************************************************************************/ void mergeList(LinkList &La, LinkList &Lb, LinkList &Lc){ LinkList pa, pb, pc; pa = La->next; pb = Lb->next; Lc = pc = La; while (pa && pa) { if (pa->data > pb->data) { pc->next = pb; pc = pb; pb =pb->next; }else{ pc->next = pa; pc = pa; pa =pa->next; } } pc->next = pa? pa :pb; free(Lb); } /************************************************************************/ /* 打印list */ /************************************************************************/ void printList(LinkList L){ printf("当前值:"); LinkList p; p = L->next; while(p){ printf("%d ", p->data); p = p->next; } printf("\r\n"); } void main() { LinkList La,Lb,Lc; ElemType e; int init,i; printf("LA:\r\n"); initList(La); createList(La, 5); insertList(La, 7, 3); printList(La); deleteListElem(La, 3, e); printList(La); InsertSort(La); printList(La); printf("Lb:\r\n"); initList(Lb); createList(Lb, 4); InsertSort(Lb); printList(Lb); printf("Lc:\r\n"); initList(Lc); mergeList(La, Lb, Lc); printList(Lc); }
求一份数据结构课程设计报告
/链表的头指针指向头结点 m_Node;/五门课成绩}; // //析构函数 void SetNodeData(); /这个是现实链表中某一结点值的函数成员 void DestroyList(int _nIndex).h"#include "/姓名 char m_chSex; / "这个是析构函数" //以向后追加的方式创建一个链表,输入0退出{ int nTemp = 0; //定义一个临时变量用于标志程序结束 cout SetNodeData(); //设置链表中结点的内容 cout > nTemp; if ('0' == nTemp) { break; } pNode->SetNodeNext(pTemp); //让链尾的Next指向新建的结点 pNode = pTemp; //将结尾元素向后移 } cout GetNodeNext(); //定义一个临时的结点指针,初始化指向头结点 int Temp = 0; //定义一个临时的变量,用来标记已检查结点的个数的 if(-1 == _nIndex) //返回头结点(即头指针) { return m_Head; } if(_nIndex GetNodeNext(); //临时结点向后移动 ++Temp; } return pNode; //没找到结点就返回NULL}void CLinkList::ShowListData(int _nIndex);void CLinkList::InsertList(int _nIndex) //插入结点的函数成员{ cout SetNodeData(); //设置插入结点的内容 pTemp->SetNodeNext(pNode->GetNodeNext()); pNode->SetNodeNext(pTemp); }void CLinkList::DeleteList(int _nIndex){ cout GetNodeNext(); //把pTemp指向要删除的结点 pNode->SetNodeNext(pTemp->GetNodeNext()); //把pNode指向要删除的结点的后一个结点 delete pTemp; //删除结点 pTemp = NULL; }LinkNode* CLinkList::GetHeadList(){ cout SetNodeData(); //修改内容}void CLinkList::ShowListData(int _nIndex){ cout ShowNodeData(); //返回想要得到位置的结点内容}void CLinkList::DestroyList(int _nIndex) { cout GetNodeNext(); //定义一个结点指针,指向要销毁位置的结点 while(pTemp->GetNodeNext() != NULL) //销毁动作的结束条件或初始条件 { pTemp->SetNodeNext(pNode->GetNodeNext()); //把需要销毁的位置的前结点的Next指向销毁位置的下一个结点 delete pNode; //销毁结点 pNode = pTemp->GetNodeNext(); //把pNode重新指向要销毁位置的结点 }} void CLinkList::ShowList(){ cout GetNodeNext(); //定义一个结点类指针,指向第0位的结点 if(NULL == pTemp) { cout ShowNodeData(); ++nTemp; if(0 == nTemp % 5 && nTemp != 0) //控制每行只能输出5个结点的内容 { cout GetNodeNext(); }}//class CNode#include "CNode.h"CNode::CNode() //构造函数 { //m_stStudent = {0}; m_Next = NULL;}CNode::~CNode() //析构函数{}void CNode::SetNodeData(){ char* pNumber = new char[30]; //用来接收字符串的临时变量 char* pName = new char[30]; char* pAppearance = new char[30]; cout > pNumber; m_stStudent.m_strNumber = pNumber; cout << ...
求数据结构课程设计的所有程序代码和实验报告。
具体格式如下:
帮忙写一个数据结构的实验
Status Initlist_Sq(SqList &L) /*初始化顺序表*/ { L=(SqList *)malloc(sizeof(SqList));l->length=0; }void Destroylist(SqList &L) /*销毁顺序表*/ {free(L); }void Clearlist_Sq(SqList &L) /*清空顺序表*/ { 同上}Status Listempty_Sq(SqList L) /*测试顺序表是否为空*/ {return(L->length==0); }Status ListInsert_Sq(SqList &L, int i,ElemType e) /*在第i个位置上插入一个元素*/ { int j;if(iL->length+1)return 0;i--;for(j=L->length;j>i;j--)L->elem[j]=l->elem[j-1];L->elem[i]=e;L->length++;return 1; }int LocateElem_Sq(SqList L,ElemType e) /*返回元素e在顺序表中的位置*/ { int i=0;while(ilength&&L->elem[i]!e) i++;if(i>=L-length)return 0;elsereturn i+1; }Status ListDelete_Sq(SqList &L, int i, int &e) /*删除第i个位置上的元素*/ { int j;if(iL->length)return 0;i--;e=L->elem[i];for(j=i;jlength-1;j++)L->elem[j]=L->elem[j+1];L->length--;return 1; }...
转载请注明出处范文大全网 » 数据结构实验的实验报告怎么写