程序设计实践任务书
课程名称:程序设计实践 课程编号:25070748 学分/学时:3学分/3周 课程类型:实践性课程 考核方式:考查 开课学期:大一第3学期 开课单位:计算机与信息工程学院
先修课程:C语言程序设计、C++面向对象程序设计 后续课程:数据结构与算法、网络编程、嵌入式软件设计等 适用专业:计算机科学与技术、网络工程、空间信息科学与工程
一、课程设计的目的、任务与要求
课程性质:程序设计实践是学习C/C++程序设计的一个重要环节。通过课程设计的综合训练,可以使学生在学习理论知识并在实验中进行了一系列基本训练的基础上,进一步加强学生对实际问题分析、编程和动手能力的提高,强化综合应用能力,扩充知识,开阔视野。学生在熟练运用Visual C++ 6.0以后,通过使用Visual C++ 6.0的训练,扩展程序设计的知识面,提高综合应用C++知识能力的要求。
教学目标:本通过学习本课程,学生能够更熟练地掌握C/C++语言的语法规则,能够运用简单的算法,综合运用编程方法和问题分析方法,设计针对解决问题的算法步骤。初步培养数据采集、数据分析、数据处理及结果分析的能力。
a.加强掌握C/C++程序设计语言的语法规程和综合编程能力;
b.培养学生面向对象和面向过程的编程思想,学会从现实问题中抽象出一般的解决方法;贯彻面向对象编程思想,抽象出合适的类,封装相关功能函数。
c.掌握基本的软件分工,根据算法画出流程图、报告书写及答辩汇报技巧;
二、设计任务及要求
任务一: C语言部分(以下选做一题)
(1)某班学生基本信息管理,可包括以下功能:
学生基本信息输入、输出、插入、删除、排序、查询、数据保存及打开。
struct student /*定义一种结构体类型*/ { int num;
char name[20]; char sex; int age; } ;
#include “stdio.h”
main()
{ struct student stu[5]; int i;
for(i=0;i<5; i++)
scanf(\ for(i=0;i<5; i++)
printf(\}
建立一个静态链表,它由三个学生数据结点组成,输出各结点的数据 #include “stdio.h” #define NULL 0 struct student {long num; float score;
struct student *next;}; main()
{struct student a,b,c,*head,*p; a.num=99101;a.score=89.5; b.num=99103;b.score=90; c.num=99107;c.score=85; head=&a; a.next=&b; b.next=&c; c.next=NULL; p=head;
while(p!=NULL)
{printf(“%ld%5.1f\\n”,p->num,p->score); p=p->next; } }
键盘上输入若干个学生的学号及考试成绩, 将这些数据写入磁盘文件y.dat中。(由学号等于0作终止标记) #include \main()
{ struct student { int num;
float score; }; struct student stu; FILE *fp;
fp=fopen(\
scanf(\while(stu.num!=0)
{ fwrite(&stu,sizeof(struct student),1,fp); scanf(\fclose(fp);}
程序4:将程序4建立的文件内容读出并显示出来。
#include \main()
{ struct student { int num;
float score; }; struct student stu[10]; FILE *fp; int n=0 ,i;
if((fp=fopen(\
{ fread(&stu[n],sizeof(struct student),1,fp); while(!feof(fp)) { n++;
fread(&stu[n],sizeof(struct student),1,fp);} for(i=0;i printf(\ fclose(fp);} else printf(\} (2)职工信息管理 职工信息包括职工号、姓名、性别、出生年月、学历、职务、工资、住址、电话等(职工号不重复),职工信息管理,可具有以下功能: 职工信息录入、输出、查询、删除、修改、数据保存、文件打开等。 基本功能要求:见(1)。 (3)图书信息管理 图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。尝试设计一图书信息管理系统,可实现以下功能: 图书信息录入、图书信息浏览、图书查询(按书名查询或按作者名查询)、排序、图书信息的删除与修改、数据保存、文件打开等。 基本功能要求:见(1)。 任务二:C++部分共分A,B两类,可选择任意一类完成。 A类: 1、学校人员信息管理系统 设计任务:设计一个学校人员信息管理系统,可以实现对学校人事的信息管理。 基本功能要求: (1)建立人员信息数据 包括学号(教工号)、姓名、性别、专业(工作系别部门)、出生时间、年龄。其中, <1> 对学生,还包括3门课的成绩(Chinese, English, Mathematics)。三门课的成绩为int型数据。 <2> 对教师,还包括职称(如教授/副教授/讲师),工资(如1432.50)。工资为double 型数据。 【英语命名提示】: 姓名: name; 性别:sex; 专业:major; 工作系别:department 教授:professor; 副教授:Associate Professor; 讲师:Lecturer 工资:salary (2)使用继承的方法构造3个类,对相应的对象放置10个学生(教师)信息。 ? People类——虚基类 ? ? Student类——派生类 Teacher类——派生类 (3)数据基本功能: ? ? 增加数据:AddData()函数。 删除数据:DeleteData()函数。根据学号(教工号),删除该人员的记录。 ? 修改数据: UpdateData()函数。对学生,根据学号,能够修改3门课的成绩;对教 师,根据教工号,能够修改“职称”和“工资”。 ? 查找功能: 1)SearchData()函数。要求能够根据“学号(教工号)”、“姓名”、“性别”三项实现查询,并能在屏幕上显示满足条件的数据记录。 2)FindMaxData()函数。对学生,查找“English”课程成绩最高的学生记录并打印;对教师,查找“工资”最高的教师记录并打印。要求:采用函数模板实现。 ? 显示功能:DisplayData()函数。在屏幕上打印所有的数据记录;打印时,先打印 学生的记录,后打印教师的记录。并且按学生(教工号)升序打印(选择)。 (4)重载功能: ? 要求对“<<”和“>>”运算符进行重载。考虑到输人学生(教工)姓名时,名 字中可能引入空格,所以重载“>>”运算符时,需要满足这个要求。 (5)异常处理功能: ? 设置异常处理,对教师工资为负数的情况给出提示。 (6)文件的输入输出功能(选择): ? 能够从文件中读入数据。外部文件为Student_ext.dat, Teacher_ext.dat。 ? 能够将数据保存到相应目录的文件中。保存数据时,分两个文件分别保存 Student.dat, Teacher.dat。 (7)参考系统界面如示: 参考系统界面如下: ? 1-增加一位人员(教师、学生)记录 ? 2-删除一个人员记录 ? 3-修改一个人员记录 ? 4-根据“学号(教工号)”、“姓名”、“性别”查找记录 ? 5-根据人员类别(学生、教师)查找“English”课程成绩最高的学生,或最 高工资的教师 ? 6-显示全部人员记录 ? 7-从外部文件追加数据 ? 8-将所有数据保存到磁盘文件 ? 9-退出系统。 如下例题所示: 2、容器类Set实现 用单链表模拟有序集合,实现集合的加入一个元素、删除一个元素、集合的交、并、差运算。注意,集合中不允许有重复元素。 1) 使用模板类 2) 根据元素个数动态分配存储空间 3) 实现集合加入一个元素删除一个元素的元素操作; 4) 实现集合的交、并、差集合操作; 5) 实现集合的文件操作;可将集合写入文件,由文件中读出集合元素。 6) 有菜单界面 #include #include } len = length; if (len == 0) return ; p = new T[len]; set(const set &a) { len = a.len; if (len == 0) return;