第一篇:VC课程设计题目
VC++课程设计题目 B090110-12
(2012-04-23 – 2012-05-19)
前言:本课程设计分成自测题和综合题两部分。两部分都列入验收。
练习题:
共11道。内容覆盖主要基本技术:基本的开发环境(调试技术),文件操作,动态链接库,图形图像编程,多线程编程,控件开发等。
每个学生选择5个完成,要求如下:
必做:1;
2,3选择其一;
4,5选择其一;
6-11选择其二;
1. 基本环境调试
将例程1用VC++打开,修改错误使程序能够运行。理解编译错误,运行错误等。
2. 数据库操作
通过ODBC数据源访问数据库(ACCESS),数据库中保存以下内容:
学生姓名,性别,年龄,家庭住址,电话,电子邮件,爱好等。
再以上基础上进行该记录的读出并可编辑浏览显示。
3. 文件操作
写一个档案文件保存以下内容:
学生姓名,性别,年龄,家庭住址,电话,电子邮件,爱好等。
再以上基础上进行该文件的读出并可编辑浏览显示。
4. 图形编程
提供一个图形工具界面,让用户能够画出直线,椭圆,多边形等几何元素,结果可以保存并可读出。
5. 图像显示
编程加载显示位图文件(bmp)。实现多个位图的叠加显示效果。在此基础上,实现动画效果。
6. 字符串操作
能够从磁盘上选择打开文本文档,读入所有内容并显示,统计所有的字符数目,单词数目,中文字符串的数目。
7. 多线程技术
目的:掌握多线程编程的基本概念,掌握用户线程的编程方法和调试方法。
建立一个工程,主线程负责用户交互,界面上提供一个按钮,通过它用户建立一个新的线程处理复杂的计算。多个线程可以共享内存中的某些变量。线程可以中止,挂起。线程间需要同步。
8. 通信技术
利用套接字编写双机通信程序,从服务器接收GPS数据。协议内容如下:
0xDB,纬度(4字节浮点),经度(4字节浮点),时间(4字节CTime),速度(2字节整型),校验(1字节异或),0xDB
在此基础上,能够在屏幕上显示其位置和速度等信息。
把接收到的内容进行解析并且显示。
9. 动态链接库
目的:了解MFC 支持的三种动态链接库:Win32DLL,MFC 常规DLL, MFC扩展库。掌握封装DLL的基本方法。
步骤:
新建三个不同的DLL工程;
分别封装一些类和函数;
新建一个测试工程对上述库里的函数或类进行调用;
封装一个对话框类到DLL,并新建一个工程调用之。
10. 控件编程
利用ATL编写一个控件,并写一个测试程序进行调用。
目的:掌握ATL控件的编写方法,测试方法和调用方法。
步骤:
新建一个ATL工程;
添加ATL控件;
往接口里添加属性和事件;
修改绘制代码;
写测试程序;
11. 多媒体数据采集
利用微软的视频,音频采集API函数,编写一个能够进行图像,音频,视频采集的程序。
综合题:
1. 硬盘录像机的制作
要求:
对外接USB接口的摄像头的数据进行采集,结果保存在硬盘上。能够根据要求对文件进行检索,播放,备份,上传。
*能够架构一个视频流服务器,提供多人的基于IE的在线视频浏览。
2. 数字存贮示波器的制作
要求:编程实现一个数字存贮示波器。示波器的踪数1-10可变,示波器的数据采样点可达1024。
示波器可以实现图形以不同的形式显示(如波形图,柱图等)。
示波器的横向,纵向均可以用鼠标进行分辨率调整。
示波器提供文件接口,可以文件读写。
结果以DLL形式封装。
创建一个客户程序对示波器进行测试。
参考:SIMULINK的示波器。
3. 大地面积测量
要求:在文本文件中保存了一条封闭路径的顶点的经纬度数据,计算由这条路封闭出的区域面积。
步骤:
(1)自行编辑三个不同大小区域的文本文件(区域范围50KM,500KM,5000KM);
(2)生成一个单独的对话框工程(项目);
(3)导入区域文件;
(4)函数说明 float Area(int nNum/*顶点数目:>=3*/, float* vX/*经度*/, float* vY/*纬度
*/, char Coord=1/*坐标系: 1 经纬度 2平面坐标*/);
(5)对于结果进行误差分析。
参考资料:地理坐标变换算法(上网搜索)
测试方法:用MATLAB工具包函数可以进行对比测试。
4. 文件编辑
创建一个多文档工程,实现对于磁盘文件的浏览,编辑等功能。
能够以文本文件,二进制文件方式打开文件;
支持剪贴板功能;
支持搜索,查找,替换功能;
支持文件定位;
功能可参考:磁盘文件工具程序UltraEdit。
5. 个人简历
创建一个个人简历程序,能够编辑自己的个人资料,添加自己的相片集进行浏览,具有保存,打印等功能。
6.文字聊天室
做一个基于点对点的聊天程序。同时具有客户端和服务器功能。
字体颜色可设置;
具有丰富的表情;
聊天记录可以保存,浏览。
7. 卡拉OK点歌管理系统
在本地硬盘库里存放歌曲文件(暂定WAV文件格式)。按照歌手,歌名(字数),类别进行检索播放。
对歌曲库可以进行管理,如添加,删除等。
计时计费功能。
8. 酒店管理系统
实现酒店客房的预定,登记,分配,计费等功能。
基本步骤:
(1)数据库后台设计,数据准备;
(2)界面设计;
(3)功能实现;
(4)测试;
9. 数字图像格式转换
能够进行BMP,GIF,TIF,JPG等图像的显示,保存,转换;
能够对图像进行处理:平滑,滤波,增强等。(算法可自行查找)
10. 简易电子地图编辑
用MapX实现地图的编辑功能:打开地图(Tab格式), 添加/删除点,线,面元素,通过属性查询并高亮显示。
请大家发挥想象,独立完成。
课程设计安排
时间与进度安排
课程设计共40学时,分在四周内完成。参考的时间分配如下(以每天4学时为例): 第1天: 基本环境熟悉;
第2-4 天: 基础练习题;
第5-9 天: 综合题;
第10天: 验收;
注:基础练习题11道中完成5道(如前所述),可在完成后请老师验收。综合课题任选一道。为避免重复,原则上每个题目只允许一定数目的同学选择。
实验报告要求
实验报告包括两部分的题目(基础练习题和综合题)。内容包括:
1. 实验目的2. 算法流程框图;
3. 数据结构说明;
4. 程序说明;
5. 测试结果;
6. 附件:程序代码。
成绩评定
成绩评定遵循过程与结果并重的原则,给出考查课成绩等级(不及格,及格,中等,良好,优秀)。依据下列因素进行学生的成绩评定:
1. 出勤率;
出勤率低于30%者将被成绩降级,低于50%将被要求重修。
2. 认真程度;
有如下行为者视情节轻重成绩将被降级直至重修:打游戏,看电影或其他无关事项。
3. 完成质量;
相同的课题,如果出现雷同的结果,将被降级。
4. 回答问题的水平;
对于完成的课题,如果不能解释,视同抄袭,成绩降级。
5. 实验报告
对于没有完成指定内容,或者雷同报告的,成绩降级。
特别的,对于完成内容超过题目要求或者有独特成果,给与成绩奖励。
2012-4-20
验收提示:
(根据最新的上级要求,做如下的通知)
5月18日: 验收日。在此之前,请大家完成准备工作(代码,必要的说明文档等)。验收时采用教师学生一对一方式进行,同学需要进行预约,并主动出示有效证件。为了提供良好的验收环境,非验收同学应在别处等候,不要围观,评论。验收老师会提问一些相关问题,请同学独立回答。学生也可能被要求进行现场的一些简单的功能改进。
对于上机时间没有达到最低要求的,取消验收资格。此数据来自计算机系统,请大家平时注意查询。
平时有问题,欢迎在教师值班时候来咨询。(见附表)
实验报告:需要提供报告的硬拷贝和电子版资料(文档,代码等),如果在成绩评定日尚未提交,则一律下一年重修。(提示:请班长或者学习委员负责统一收齐,按照学号排序,交到指定位置)。
第二篇:VC课程设计报告
编号:
河北工业大学计算机软件技术基础(VC)2007年课程设计报告
学院 班级 姓名 __ 学号 ____ 成绩 __ ____
一、题目:查找满足特定条件的三位数(27)
二、设计思路
1、总体设计 1)分析程序的功能
2)系统总体结构:设计程序的组成模块,简述各模块功能。
2、各功能模块的设计:说明各功能模块的实现方法
3、设计中的主要困难及解决方案
在这部分论述设计中遇到的主要困难及解决方案。1)如何将输出1~9不重复数字 2)困难2
4、你所设计的程序最终完成的功能 1)说明你编制的程序能完成的功能 2)准备的测试数据及运行结果
三、程序清单
如果是使用一个文件完成的程序,只需列出程序代码。
如果是使用多文件完成的程序,首先说明程序中的代码存放在哪些文件中,说明文件名(例如:本程序包含first.cpp、second.cpp、third.cpp和all.h四个文件);然后依次给出每个文件名及该文件清单,例如:
1、first.cpp文件清单
2、second.cpp文件清单
3、third.cpp文件清单
第1页/共2 页
编号:
4、all.h文件清单
(说明:程序清单中一定要有注释。将程序中自己编写的代码列在此处,系统自动生成的代码就不要列出了。程序清单部分的行间距设为1行即可。)
四、对该设计题目有何更完善的方案
1、对自己完成程序进行自我评价。
2、对课题提出更完善的方案
五、收获及心得体会
1、通过本次课程设计,自己在哪些方面的能力有所提高。
2、收获和心得体会。
日期: 2007年
月
日
(说明:本模板只提供参考,每个同学根据自己课题的特点,可减少或增加某方面的论述)
第2页/共2 页
第三篇:VC课程设计教学和任务
VC++ 课程设计指导书
江苏科技大学南徐学院电子信息系
2011年9月
《计算机程序设计(vc++)课程设计》课程设计指导书
一. 课程设计教学和任务
《计算机程序设计(vc++)课程设计》是实践性教学环节,是学生必修的一门计算机实践课程。
本课程设计的目的是通过综合性程序设计训练,使学生进一步巩固对计算机程序设计语言(vc++)基本语法,基本算法的理解,加深对面向对象程序设计的理解与应用,并使学生养成模块化,结构化程序设计的良好风格,以及一定的程序组织能力,掌握基本程序设计的方法和技巧,为学习后续课程和实际编程打下良好的基础。
本课程设计的重点要求学生掌握基本程序设计理念和方法,培养学生基本程序设计的应用和开发能力。二. 课程设计要求与内容
1.本课程设计要求
(1)学生必须完成本指导书中所有的小综合设计题,并且完成大综合设计题中的任意一题(具体题目由任课教师指定)。要求:对主要变量及函数要加注释,以说明其功能。
(2)每个学生必须完成课程设计报告一篇。(报告格式见附录)2.课程设计的内容
本课程设计内容包括两个部分:小综合设计题和大综合设计题。
====================================== 附:课程设计报告格式一、二、课程设计目的 课程设计内容
1、小综合题
2、大综合题
三、课程设计体会及建议
小综合设计题
1.二维数组的操作运算
定义一个n×n的二维数组a,将该二维数组中周边元素的值全部置为2,其他元素全部置为0。
例如: 当n为8时生成并输出的矩阵为:
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0 定义类MAT,具体要求如下:
(1)私有数据成员
int n;二维数组的阶数
int *p;将二维数组以一维数组方式存储,p是起始指针。
(2)公有成员函数
MAT(int n1);初始化n,并动态申请数组空间,令p指向该空间。
void create();给数组赋值。
void print();按矩阵方式输出二维数组。
~ MAT();析构函数,释放动态数组空间。
(3)在主函数中完成对该类的测试。键盘输入二维数组的阶数n(如8或6),定义一个MAT类的对象m,用n初始化m,按要求生成并输出数组的值。
2.链表
建立一条无序链表,结点名为node,用一个函数实现将这条链表构成一条新的逆序链表,即将链表头当链表尾,链表尾当链表头。输出这两条链表上各个节点的值。
3.字符串处理
将字符串中指定的英语单词(字母子串)进行单数变复数的处理,单词之间用非字母分隔。为了简化编程,将单词的单数变复数的规则是:直接在单词后加s。例如单词student的复数为students。例如,有下列字符串:
We are student, you are student, too.指定单词student,将字符串中所有的student修改为students。处理后的字符串为:
We are students, you are students, too.试建立一个类Modistr,完成以上工作。具体要求如下:
(1)私有数据成员
char *str;存放指定的字符串;
(2)公有成员函数
Modistr(char *s);构造函数,动态申请字符串空间,用s所指向的串初
始化str;
void print();输出字符串str;
void modify(char *wordp);将wordp所指向的单词转换为复数。
~Modistr();析构函数
(3)在主函数中完成对该类的测试。定义类Modistr的对象mys,用字符串“We are student, you are student, too.”初始化mys,调用函数modify(char *)完成将单词“student”单数变复数的处理。
输出变换前和变换后的字符串。
提示:判断一个字符ch是否为字母,可用系统库函数isalpha(ch)。该函数的功能是:若ch是字母,返回真,否则返回假。使用该函数必须包含头文件ctype.h。
4.素数问题
建立一个类PRIME,求指定范围内的所有素数(质数)。具体要求如下:
(1)私有数据成员
int data[200];依次存放指定范围内的所有素数。
int min,max;存放待求素数的数值范围的下限和上限。
int num;存放min与max之间的素数个数。
(2)公有成员函数
构造函数PRIME(int n1, int n2);用n1和n2初始化待求素数的范围 min、max及num(值为0)。
void process();求指定范围内的所有素数,把它们存放在数组data中。求素数的算法必须是:首先将min与max之间的所有奇数依次放入数组data中,然后依次判断data中的每一个元素是否为素数。
若不是素数,则将其值赋为0。最后,数组data中不为0的元素均为素数。将不为0的元素值集中连续存放到数组的前面,同时统计素数个数。
void print();输出求出的所有素数,同时输出素数个数。
(3)在主程序中对该类进行测试。
定义一个PRIME类的对象test,并用待求素数范围min =10, max=200初始化test。通过test调用成员函数求出10至200之间的所有素数,并输出结果。[提示] 素数的定义是“只能被1和它本身整除的正整数”,素数也称为质数。
5.信号系统问题
定义一个类为形状,由它公有派生出正方体、球体和圆柱体。利用虚函数的多态性形式完成计算正方体、球体和圆柱体的体积。具体要求如下:(1)基类: shape 保护数据成员:double a,b;
公有构造函数:shape(double,double); 公有纯虚函数:double volume();(2)派生类
正方体、球体和圆柱体的类名分别为cube,sphere,cylinder, 各派生类均需要定义公有的构造函数以及求体积的虚函数double volume()。(3)派生类为球体时,a为半径,b为0。
派生类为正方体时,a表示边长,b为0。
派生类为圆柱体时,a为圆柱体的边长,b为圆柱体的高。
(4)设计一个完整的程序,分别计算正方体、球体和圆柱体的体积并输出结果。
测试数据如下:
形状类指针变量:p、球体对象:C(0.8)、正方体对象:S(3.2)和圆柱体类对象:R(4.1,5)。用指针p分别指向派生类对象。
输出结果为:
球体的体积是2.14357
正方体的体积是32.768
长方体的体积是263.917 提示:球体的体积公式=4/3*π*半径*半径*半径(其中π取常数3.14)
正方体的体积=棱长×棱长×棱长
圆柱的体积=底面积×高
6.求两个日期之间相差的天数。
设计一个日期类Date,包括日期的年份、月份和日号,编写一个友元函数,求两个日期之间相差的天数。具体要求如下:(1)私有数据成员
int year, month, day;
(2)公有成员函数
Date(int y,int m,int d);//构造函数,初始化日期。void disp();//输出日期。
friend int count day(Date &d,int);// 使用二维数组存放各月天数,第一行对应非闰年,第二行对应闰年。
friend int leap(int year);
//判断是否闰年,是返回1,否则返回0。friend int subs(Date &d1,Date &d2);
//求两个日期之间相差的天数。
(3)在主函数中完成对该类测试,定义两个对象d1(2000,1,1)和d2(2002,10,1),调用subs函数。程序正确的运行结果是: 2000.1.1与2002.10.1之间有1002天
7.身份证。
已知旧身份证号码共15位,其中第7~12位是以2位年份+2位月份+两位日期组成,而新身份证号码共18位,其中第7~14位是以4位年份+2位月份+两位日期组成。试定义一个类ID,根据居民的出生日期检查其身份证号是否正确。
具体要求如下: 1)私有成员:
char s[19] : 存放身份证号。
int yy, mm, dd : 分别存放居民出生日期的年(4位)、月(10~12月两位,其余1 位)、日(两位)。
2)公有成员:
ID(char str[]):构造函数。
int val(char *p): 将数字字符串p转换为相应的十进制数,如“123”转换为数值123,“08”转换为数值8;
int fun(): 根据出生日期检验身份证号是否正确,如果正确,函数值为1,否则为0。
必须使用如下算法:先分别取出身份证中的表示年份、月份、日期的子字符串,然后利用上述int val(char *p)函数转换为数值,再与出生日期的相应成员数据比较。
void print(): 输出所有成员数据。
3)在主函数中输入两个身份证号(一个18位:***910,另一个15位***),分别用这两个身份证号生成类ID的对象,在主函数中通过成员函数fun确定身份证号是否正确并输出相应的信息(身份证号、出生日期、检验结果)。
8.9×9乘法口诀表。
定义一个类MUL,生成如下的9×9乘法口诀表,要求口诀表存储在动态数组中,并输出到屏幕上。运行结果如下: 1 2 3 4
5
6
7
8
9
具体要求如下:(1)私有数据成员
nt(*a)[9];a是一个行指针变量,其指向的数组空间是动态生成的,用于存放口诀表。口诀表存放在二维数组的左下三角形中。
(2)公有成员函数
MUL();构造函数,动态生成数组空间。void process();生成乘法口诀表。void print();输出乘法口诀表。
~MUL();析构函数,释放动态数组空间。
(3)在主函数中完成对该类的测试。定义一个MUL类的对象a,通过a调用成员函数求出并输出乘法口诀表。
9.字符串分类。
输入一个字符串,串内有数字和非数字字符。
例如:
ABC2345
345rrf678
jfkld945
将其中连续的数字作为一个整数,依次存放到另一个整型数组b中。如对于上面的输入,将2345存放到b[0]、345放入b[1]………
统计出字符串中的整数个数,并输出这些整数。要求:
(1)在主函数中完成输入和输出工作。
(2)设计一个函数,把指向字符串的指针和指向整数的指针作为函数的参数,并完成从字符串中依次提取出整数的工作。
10.数组元素排序
将含有12个元素的数组作如下处理:先将所有数据按其在数组中的次序分成4等分,然后以每一组数据为单位按其平均值从小到大排序。例如,原数组为:{5,6,7,1,2,3,7,8,9,2,3,5 }处理后的数组为:{1,2,3,2,3,5,5,6,7,7,8,9}试定义一个类DATA完成上述功能,具体要求如下:
(1)私有数据成员int a[12], b[12];数组a用以存放原始数据,数组b用以存放处理后的数据。
(2)公有成员函数DATA(int x[], int n);构造函数。用参数x初始化a,将b的所有元素初始化为0,n为数组x的元素个数。
void convert(int x[4][3]);将a中的数据进行分组,并转换为二维数组x,其中每一组依次为数组x的一行。
void sort();按每组的平均值实现分段排序,并将排序后的数据存放到数据成员b中。
算法要求:利用函数convert()将a转换为二维数组,再求二维数组每一行的平均值,然后根据该平均值从小到大对该二维数组进行行排序,并将结果按题意转换为一维数组存放到b中。
void print();输出a和b的所有元素。
(3)在主函数中利用给定的数组生成类DATA的对象test,并对该类进行测试。假设给定数组为{5, 6, 7, 1, 2, 3, 7, 8, 9, 2, 3, 5}。输入/输出示例:
处理前的数组:5 6 7 1 2 3 7 8 9 2 3 5
处理后的数组:1 2 3 2 3 5 5 6 7 7 8 9
大综合设计题
设计题目一:学生学籍成绩管理系统
每个学生的信息包括:姓名、学号、性别、和学生的成绩信息 如:英语、数学、程序设计及体育成绩等各门课的成绩,要求程序能自动增加一门或是几门课的成绩,同时可以删除课程。
从键盘输入数据,然后,完成如下处理:
1.对学生姓名或学号进行查询,显示其信息,求出其总成绩、平均成绩、平均基点,并且显不在全班的学成绩排名。2.对所有学生,按班级计算平均。
设计题目二:通讯录管理系统
1.系统概要
该系统的功能是实现通讯录管理。2.基本功能要求
(1)输入姓名、单位、电话号码(2)显示上述内容(3)按姓名查找后显示(4)删除有关记录(5)增加记录
(6)保存修改后的文件(7)显示修改后的文件
3.各功能模块的程序流程图。(学生完成)4.完整的源程序代码。(学生设计完成)
设计题目三:小型特殊计算器
1.系统概要
本程序的功能是实现一个特殊的计算器,可以实现复数、有理数、矩阵和集合的特殊计算。程序可以实现复数、有理数的加、减、乘、除,可以实现矩阵的加法、减法和乘法运算,也可以实现集合的求交集、并集、子集的运算。注:可任选两种运算。
2.基本功能要求
(1)功能选择可以用菜单来实现 例如:请选择您的计算内容: 1.复数计算 2.有理数计算 3.矩阵计算 4.集合计算 0.退出
用户通过输入不同的数字进入不同的菜单。次级菜单主要显示本程序的功能,主要的功能有加法、减法、乘法和除法以及集合的求交集、求并集、求子集。(2)运行时给出明确的提示信息。
比如,输入一个什么类型的数据。根据用户的输入计算输出结果。由于数据类型比较多,可以一次输入第一个复数的实部,第一个复数的虚部,再输入第二个复数的实部、虚部。矩阵运算需要先输入矩阵的行数和列数,然后依次输出矩阵的第一行第一列的元素、第一行第二列的元素等等,依次类推。有理数运算需要一次输入有理数的分子、分母。集合运算需要输入集合的元素个数,然后依次输入集合中的每一个元素。
3.各功能模块的程序流程图。(学生完成)4.完整的源程序代码。(学生设计完成)
设计题目四:选修课小系统
1.系统概要
通过这一款选修课小系统,学生可以登入学生端进行选课及其他的操作,管理者通过登入管理端可以进行对选修课系统的数据的管理和维护。在学生端主要设置了3个基本功能:学生选课、学生情况、选课情况等;在管理端主要设置了9个基本功能:增加/删除学生、增加/删除课程、更改学分、填写成绩、学生情况、选课情况、保存数据等。这些功能基本上能满足选课的基本要求。此程序可以初步体现课程设计的目标。2.基本功能要求
用VC++编写一个界面美观流畅学生选课系统。学生有名字,学生最多可学五门课程,学生实际学的门数,可以给定学生的名字,可以得到学生的名字,可以得到学生给定课程的成绩,可以得到学生所学课程的平均成绩,可以给学生增加一门课(同时在该课程中增加一个学生)。课程最多有30个学生,课程有实际学生
数,课程有实际学生名单,课程有学分数,课程有每个学生成绩,课程可以得到学分数,课程可以设置学分数,课程可以得到班平均成绩,课程可以得到某个学生成绩。
3.各功能模块的程序流程图。(学生完成)4.完整的源程序代码。(学生设计完成)
设计题目五:学生成绩管理系统
系统上采用VC++为开发环境,这个编译器功能完善,使用方便。课程设计《学生成绩管理系统》,它的主要功能是对学生的成绩进行修改和管理。
系统功能要求:(1)界面
************************************ 学生成绩管理系统
************************************ ************************************ ** 1--输入数据 ** ** 2-查询成绩 ** ** 3--修改成绩 ** ** 4--输出所有学生成绩 ** ** 5--统计及格和优秀人数 ** ** 6--退出系统 ** *************************************(2)功能
程序的主要功能是输入学生姓名、成绩,学号自动生成,并可以对学生的成绩按学号和姓名进行查询。该系统具有存贮学生数据,按学号、姓名查询,按需要修改学生成绩,列出学生成绩和统计功能。
第四篇:VC课程设计教学和任务12131
VC++ 课程设计指导书
江苏科技大学南徐学院电子信息系
2012年6月
《计算机程序设计(vc++)课程设计》课程设计指导书
一. 课程设计教学和任务
《计算机程序设计(vc++)课程设计》是实践性教学环节,是学生必修的一门计算机实践课程。
本课程设计的目的是通过综合性程序设计训练,使学生进一步巩固对计算机程序设计语言(vc++)基本语法,基本算法的理解,加深对面向对象程序设计的理解与应用,并使学生养成模块化,结构化程序设计的良好风格,以及一定的程序组织能力,掌握基本程序设计的方法和技巧,为学习后续课程和实际编程打下良好的基础。
本课程设计的重点要求学生掌握基本程序设计理念和方法,培养学生基本程序设计的应用和开发能力。二. 课程设计要求与内容
1.本课程设计要求
(1)学生必须完成本指导书中所有的小综合设计题,并且完成大综合设计题中的任意一题(具体题目由任课教师指定)。要求:对主要变量及函数要加注释,以说明其功能。
(2)每个学生必须完成课程设计报告一篇。(报告格式见附录)2.课程设计的内容
本课程设计内容包括两个部分:小综合设计题和大综合设计题。
====================================== 附:课程设计报告格式一、二、课程设计目的 课程设计内容
1、小综合题
2、大综合题
三、课程设计体会及建议
小综合设计题
1.二维数组元素旋转
以下程序将N×N阶矩阵向左旋转90°,得到一个新的N×N阶矩阵。例如:原矩阵为:
向左旋转90°后的矩阵为:2.找回文数
判断一个字符串是否文回文,是指正向拼写和反向拼写都一样的字符串。例如,“madam”是回文。假定字符串中只出现字母,且不区分字母的大小写,即“A”和“a”被视为同一字母,其余类似。如“Madam”是回文。而“Sir”不是回文。函数plain(char*s)判断一个字符串是回文时,若是回文,函数返回1,否则,返回0.在主函数中,当判断一个字符串是回文时,输出Yes,否则输出No。
3.二维数组的操作运算
定义一个N×N的二维数组a,将该二维数组中周边元素的值全部置为2,其他元素全部置为0。例如,当n为8时生成并输出的矩阵为
定义类MAT,具体要求如下:(1)私有数据成员。
●int n:二维数组的行数(列数)。
●int *p:将二维数组以一维数组方式存储,p是起始指针。(2)共有成员函数。
●MAT(int n1):初始化n,并动态申请数组空间。令p指向该空间。
●void create():给数组赋值。
●void print():按矩阵方式输出二维数组。●~MAT():析构函数,释放动态数组空间。
(3)在主函数中完成对该类的测试。从键盘输入二维数组的行数(列数)n(如8或6)。定义一个MAT类的对象m,用n初始化m,按要求生成并输出数组元素的值。
4.删除序列中相同的数
定义一个字符串类STR,从左到右对字符串中每个字符删除其后所有相同的字符,只留下第一次出现的那一个。例如,若字符串为“cocoon”,删除重复出现的字符后,其结果是字符串“con”。
具体要求如下:(1)私有数据成员。
●char *s1:指向原字符串,存放字符串的空间需动态分配。
●char *s2:指向结果字符串,存放字符串的空间需动态分配。(2)公有成员函数
●STR(char *str:构造函数,用str初始化s1,动态分配s1和s2指向的空间。
●void delsame():删除重复出现的字符。
●void show():输出原字符串和结果字符串。
●~STR():析构函数,释放动态分配的存储空间。
在主函数中定义一个STR类的对象test,用字符串“cocoon”初始化test,通过test调用成员函数完成删除工作,输出删除前后的两个字符串。
5.求任意数降序数
对任意一个各位数字不完全相同的四位数(如4133),将各位上的数字从小到大排列得到一个升序数(1334),再将各位上的数字从小到大排列得到一个降序数(4331)。用大数(降序数)减去小数(升序数)得到一个新的四位数(2997=4331-1334)。若相减后不足四位,则高位上补零,称此过程为一次变换。将新的四位数按上述方法再变换一次,又得到一个四位数。有断言,经过多次变换,最后一定会得到一个固定的数6174。以下程序试图验证这个断言。
6.求两个日期之间相差的天数。
设计一个日期类Date,包括日期的年份、月份和日号,编写一个友元函数,求两个日期之间相差的天数。具体要求如下:(1)私有数据成员 int year, month, day;
//构造函数,初始化日期。(2)公有成员函数 Date(int y,int m,int d);void disp();//输出日期。
friend int count_day(Date &d,int);// 使用二维数组存放各月天数,第一行对应非闰年,第二行对应闰年。
friend int leap(int year);
//判断是否闰年,是返回1,否则返回0。
friend int subs(Date &d1,Date &d2);
//求两个日期之间相差的天数。(3)在主函数中完成对该类测试,定义两个对象d1(2000,1,1)和d2(2002,10,1),调用subs函数。程序正确的运行结果是: 2000.1.1与2002.10.1之间有1002天
7.实现点对象之间的各种运算。
设计一个点类Point,Point类提供了6个运算符重载函数(参加程序中的代码和注释),以实现相应的运算。具体要求如下:(1)私有数据成员 int x,y;
// x,y分别表示横坐标和纵坐标。Point();//构造函数,初始化x,y的值为0。Point(int i,int j);
// //置x、y坐标。
Point(Point &);//利用完成拷贝的构造函数,给x、y赋值。~Point(){};
//析构函数,无操作。int getx();
//取x坐标。int gety();
//取y坐标。void disp();//输出x、y的值。void offset(int,int);// 提供对点的偏移。
void offset(Point);// 重载,偏移量用Point类对象表示。bool operator==(Point);// 运算符重载,判断两个对象是否相同。bool operator!=(Point);// 运算符重载,判断两个对象是否不相同。void operator+=(Point);// 运算符重载,将两个点对象相加。void operator-=(Point);// 运算符重载,将两个点对象相减。
Point operator+(Point);// 运算符重 载,相加并将结果放在左操作数中。Point operator-(Point);// 运算符重载,相减并将结果放在左操作数中。(3)编写一个程序测试该类,测试数据及要求如下:
点类:p1(2,3),p2(3,4),p3(p2)完成的运算有:
以p3为主要测试对象,首先输出p3坐标值,置p3偏移量(10,10),p2==p3;p2!=p3;p3+=p1;p3-=p2;p3=p1+p3;p3=p1-p2;每完成一次运算,要将结果进行输出。程序正确执行的结果如下:
1:(3,4)2:(13,14)3:0(2)公有成员函数
4:1 5:(15,17)6:(12,13)7:(14,16)8:(11,12)8.定义一个描述学生通讯录的类,并进行测试。
定义一个描述学生通讯录的类COMMU,数据成员包括:姓名、学校、电话号码和邮编;成员函数包括:输出各个数据成员的值,分别设置和获取各个数据成员的值。
分析:由于姓名、学校和电话号码的数据长度是可变的,可使用动态的数据结构。邮编的长度是固定的,可定义一个字符数组来存放邮编。将数据成员均定义为私有的。用一个成员函数输出所有的成员数据,用四个成员函数分别设置姓名、单位、电话号码和邮编,再用四个成员函数分别获取姓名、单位、电话号码和邮编。主函数完成简单的测试工作。具体要求如下:(1)私有数据成员
char *pName;//
char *pSchool;
char *pNum;
char
Box[10];(2)公有成员函数
void Print(void);
//输出数据成员
//释放数据成员占用的void Init(char *,char *,char *,char *);
//完成初始化
void FreeSpace(void);空间
void SetName(char *name);void SetScool(char *unit);void SetNum(char *num);void SetBox(char *mailnum);char *GetName(void);char *GetScool(void);char *GetNum(void);char *GetBox(void);
//置姓名
//学校名称 //置电话号码 //置邮编 //取姓名 //取学校 //取电话号码 //取邮编
//单位 //电话号码 //邮编
(3)在主函数中完成对该类测试,定义两个对象c1和c2,分别两个对象的成员进行初始化、值设置并输出测试结果。
9.打印日历。
根据所输入的年份打印该年的日历。主要功能函数如下: void printmonth(int);//打印每个月的日历
void printhead(int);
//打印日历每个月的头,并将打印位置移到该月第一天的星期几处
int firstday(int);
//计算第一天是星期几 int daysofmonth(int);//该月有多少天 int isleap(int);
//判断是否是闰年
需定义两个全局变量year和weekday,分别存放年份 和 每个月的第一天是星期几
10.集合的操作
定义一个求两个集合的交集的类DataSet。并在主函数中用两个字符串进行测试。具体要求如下:
1)私有数据成员:
char *p1, *p2;指向存放两个原始数据集合的指针。
char *p;指向复制出来的两个集合的交集数据的指针。
2)公有成员函数:
DataSet(char a[ ], char b[ ]): 构造函数,提供原始数组,同时也要根据两个数组中较大的一个初始化指针p所指向的内存。
void fun(): 功能函数,求交集。要求交集中无重复字符。
void print(): 输出函数,输出原始数据及结果。
~DataSet(): 析构函数,实现必要的功能。
大综合设计题
设计题目一:学生成绩管理系统
1.系统概要
该系统完成学生信息的输入,插入,删除一个学生信息,修改,查找学生信息,计算学生的总分,并能按学生的总分排序。
2.基本功能要求
(1)按顺序输入若干个学生信息
(2)插入一个学生信息(先输入插入位置,再输入学生信息)(3)删除一个学生信息(先删除插入位置,再删除学生信息)(4)修改已知学号的学生信息(按学号来找)(5)查找已知学号的学生信息(按姓名来找)(6)统计一个学生的总分成绩(7)按总分从高到低输出学生成绩表(8)显示所有学生的信息(9)退出。
3.各功能模块的程序流程图。(学生完成)
4.完整的源程序代码。(学生设计完成)
设计题目二:通讯录管理系统
1.系统概要
该系统的功能是实现通讯录管理。
2.基本功能要求
(1)输入姓名、单位、电话号码(2)显示上述内容(3)按姓名查找后显示(4)删除有关记录(5)增加记录(6)保存修改后的文件
(7)显示修改后的文件
3.各功能模块的程序流程图。(学生完成)
4.完整的源程序代码。(学生设计完成)
设计题目三:小型特殊计算器
1.系统概要
本程序的功能是实现一个特殊的计算器,可以实现复数、有理数、矩阵和集合的特殊计算。程序可以实现复数、有理数的加、减、乘、除,可以实现矩阵的加法、减法和乘法运算,也可以实现集合的求交集、并集、子集的运算。注:可任选两种运算。
2.基本功能要求
(1)功能选择可以用菜单来实现 例如:请选择您的计算内容:
1.复数计算 2.有理数计算 3.矩阵计算 4.集合计算 0.退出
用户通过输入不同的数字进入不同的菜单。次级菜单主要显示本程序的功能,主要的功能有加法、减法、乘法和除法以及集合的求交集、求并集、求子集。(2)运行时给出明确的提示信息。
比如,输入一个什么类型的数据。根据用户的输入计算输出结果。由于数据类型比较多,可以一次输入第一个复数的实部,第一个复数的虚部,再输入第二个复数的实部、虚部。矩阵运算需要先输入矩阵的行数和列数,然后依次输出矩阵的第一行第一列的元素、第一行第二列的元素等等,依次类推。有理数运算需要一次输入有理数的分子、分母。集合运算需要输入集合的元素个数,然后依次输入集合中的每一个元素。
3.各功能模块的程序流程图。(学生完成)
4.完整的源程序代码。(学生设计完成)
第五篇:课程设计题目
1、家庭财务管理系统
设计一个用于管理家庭收入和支出的系统,实现以下功能:
1)对收入和支出的类别进行分类,实现类别的添加、删除、修改操作;
2)对每天的各项支出和收入进行记录和管理,该系统包括每月预算,每日消费记录的录入、修改、查询、删除,3)可按年、月、日对收入和支出进行统计和浏览的功能。并生成相应的结算报表。
2、银行个人账户管理系统
包括账户管理(开户、销户、挂失等功能)和存取款管理(存款、取款,操作明细打印)功能,各项操作应符合银行实际操作。
3、网络图片管理系统
设计一个网络的图片管理系统,可以通过该系统上传,分享,浏览,评论自己或者好友的图片。实现以下功能:1)用户注册与登录、2)个人资料修改、3)添加好友功能、4)创建相册和子相册、5)上传图片到指定相册等功能,6)服务器处理并存至特定文件夹,同时用户设定是否允许其他人浏览,默认为好友间才能浏览,7)添加/取消好友的功能,8)可以在图片下添加评论。
4、师生网上互动平台
设计一个网络教学互动平合, 具体实现的功能如下:
(1)教师部分功能
进行课程管理: 进行答疑管理;进行试题管理。
(2)学生部分功能
阅读公告、修改个人信息、查看“我的问题”、进行网上提问、进行网上测试。
5、业绩考核系统设计与实现
功能要求:
1)论文分类管理功能(期刊刊物类别(核心、一级等)、影响因子等相关信息的管理)
2)个人论文信息管理功能(个人发表论文情况的录入、修改、删除)
3)用户管理(包括普通用户、管理用户、审核用户的相关权限及功能设计)
4)生成个人业绩报表
进度安排及主要内容:
第1天:理解题目,进行需求分析,功能确定,模块划分,及总体设计;
第2天:确定编程开发环境,并熟悉环境及相关API;
第3天--第4天:进行详细代码设计,完成系统基本功能;
第5天:系统运行测试修改,完成系统设计,撰写实习报告。
报告内容:
1、系统需求分析、功能确定、模块划分,开发环境选定;
2、系统总流程图,(如有必要画主要模块流程图)
3、系统设计主要代码及解析(要求只写主要功能模块的关键代码)
4、课程设计总结。