第一篇: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课程设计报告--教学事务管理系统
C++ 课 程 设 计 实 验 报 告
学号
姓名
院系专业 能源与环境工程 热能与动力工程
一、课题名称
《教学事务管理系统》
二、问题陈述
使用面向对象设计的系统分析和设计,设计出适当的数据结构,编写一个信息管理程序,程序的功能是管理学生基本信息,要求具有添加,删除,查询,排序的功能,并具有一定的查询功能。
三、设计目标和设计任务
新学期开学时新学生需要注册,登记注册信息。注册信息包括每个已注册学生的班级代号、学号、姓名、注册的学期等。
每个学期开始,学生可以选课,登记选课信息。选课信息包括已注册的每个学生所选的课程,选课仅限该生注册的学期。
每个学期考试完毕,需要成绩登记。每个学生所选课程的考核成绩,以及此成绩的类型。
所输入学生的信息如果有误,可以修改。对于退学、转学的学生,删除有关资料,对转入的学生,可以增加其各项信息。
学生信息包括:学号、班级、院系、姓名、性别、联系电话、家庭住址等。课程信息包括:课程代号、课程名、开课学期、学分、课时。
成绩信息包括:姓名、学号、班级、课程代号、成绩、类别(初修、补考、重修)。可提供的查询功能:
根据某些信息(班级、性别、专业)查询学生名单; 某门课程的选修者名单(含学号、成绩、成绩类型); 某个学生某个课程某学期的成绩单; 某个班级某个课程各个学生的成绩单; 某个课程选修者中不及格学生的名单;
某个课程的各项信息(课程代号、学分、课时、开课学期);
四、解题算法思想
程序包括11个对话框,主对话框上四个按钮,分别调用“注册信息”、“选课信息”、“成绩录入”及“信息管理和查询”四个子对话框。
其中,在“注册信息”对话框内可以选择学生的注册学期,点击“确定”按钮后,弹出“学生信息”对话框,此对话框与后面将会提到的“信息管理与查询”对话框的子对话框之一,“学生信息”相同,二者可相互共享。在该对话框中点击“增加”按钮,将调用“成员对话框”,用以实现学生的注册。信息填写完整后点击“确定”,并可依次返回至主对话框。
接着,点击“选课信息登记”,弹出选课信息对话框,在相应输入框或下拉菜单中输入信息后,点击所要选的课程(可多选),然后点“确定”,程序可以自行判断信息输入是否合理(选课学生是否已经注册或是否已选择同样的课程),如果有误,则通过消息框提示,并可以再次输入信息;如果信息合理,则提示选课成功。
点击“返回”回到主对话框,可通过“学生成绩录入”按钮调用“成绩录入”对话框,在此对话框中,可在输入框或下拉菜单中填写相关信息,程序同样可以自行判断信息输入的合理性(输入的学生是否已注册或是否已选择相应课程),如果输入有误,则弹出消息框提示,可以再次输入信息;如果信息合理,则成绩录入成功,新的成绩信息会在下方的List Control控件中显示。也可以直接点击下方List中的原有信息,程序会自动将该信息中的学生学号及相应课程代码填写入上方控件,方便成绩的录入。所有成绩录入完成后,点击“完成并保存”按钮,保存已录入的信息,同时自动返回至主对话框。
如需要查询相应信息,可点击“信息管理与查询入口”,调用“信息管理与查询”对话框。在这个对话框中,包含三个主要功能按钮,“学生信息”,“课程信息”和“成绩信息”,分别用以提供相应的查询功能。
点击“学生信息”,进入“学生信息”对话框。在这里可以实现学生信息的查询及管理功能。在上方控件中填写或选择相应信息后,便可以在下方的List Control控件中查看到所要的学生信息,同时选中相应条目后,可以通过右方的“删除”、“增加”和“修改”按钮,实现数据的管理。而通过下方“载入”和“保存”按钮,可以载入及保存现有数据,当然也可以载入进之前保存的文件,从而实现相同学生,不同学期的信息查询。
返回至“信息管理与查询”对话框后,点击“课程信息”按钮,在弹出的“课程信息”对话框中,可以查看所有的课程的基本信息,并可以通过“增加课程”按钮,调用“增加课程”对话框,填写新课程信息,从而增加新的课程;在“课程信息”中的控件中选择某门课程后,也可以通过“查看课程”按钮调用“查看课程”对话框,查看到选修该课程的学生名单,包括学号,成绩等信息,勾选上方控件后可以查看不及格学生的名单。
依次返回至“信息管理与查询对话框”,点击“成绩信息”后,进入“成绩信息”对话框。在这个对话框中可以在下方的List Control看到所有学生的成绩单,通过上方的Edit控件输入各个相应的筛选条件,便可以在下方看到所有符合条件的学生的成绩单。
依次返回至主对话框,点击“◎”退出程序。
五、数据结构描述
程序数据通过两个节点类、两个链表类来存储。分别如下:
{ public:
CString m_CourseNum;//存储课程代码 CString m_CourseName;//存储课程名 CString m_CourseTerm;//存放课程开课学期 CString m_CoursePoint;//存放课程学分 CString m_CourseTime;//存放课程课时数 int m_CourseScore;//存放学生课程成绩 CString m_CourseType;//存放学生成绩类型 Course *next;Course()//默认构造函数 class Course
{
} Course(CString CourseNum,CString CourseName,CString CourseTerm,CString m_CourseNum=“";m_CourseName=”“;m_CourseTerm=”“;m_CoursePoint=”“;m_CourseTime=”“;m_CourseScore=0;m_CourseType=”";next=NULL;CoursePoint,CString CourseTime);};
class CourseList { public:
Course * head;CourseList();void DeleteNode(Course *p);//用来删除存放指定课程的链表 void SaveToFile(const char *name);//将课程信息保存至文件 void LoadFromFile(const char *name);//从文件中导入课程信息 void ReleaseList();//释放链表
void AddNode(CString CourseNum,CString CourseName,CString CourseTerm,CString CoursePoint,CString CourseTime);//向链表中添加节点
};
class CStudent Course* FindNode(CString CourseNum);//根据课程代码查找节点 { public:
CString m_StudentNo;//存放学号 CString m_Class;//存放班级 CString m_Name;//存放学生姓名 CString m_Sex;//存放学生性别 CString m_Dept;//存放专业
CString m_PhoneNo;//存放学生电话号码 CString m_Address;//存放学生家庭住址 CString m_Term;//存放学生注册学期 CStudent *next;Course m_Course[20];//用来存放学生选的各项课程 int s;//存放学生所选课程的数量 CStudent();CStudent(CString CourseNum,CString StudentNum,int Score,CString ScoreType);CStudent(CString StudentNo,CString Class,CString Name,CString Sex,CString Dept,CString PhoneNo,CString Address);};class CStudentList { public:
CStudent * head;//头指针 int n;//节点数量 CStudentList();void DeleteNode(CStudent *p);//从链表中删除指定节点 void SaveToFile(const char *name);//将链表内容存入文件 void LoadFromFile(const char *name);//从文件载入链表内容 void ReleaseList();//释放链表 void AddNode(CString StudentNo,CString Class,CString Name,CString Sex,CString Dept,CString PhoneNo,CString Address);//向学生链表中添加节点 void AddScoreNode(CString CourseNum,CString StudentNum,int Score,CString ScoreType);//向链表中加入成绩信息 void AddCourseNode(CString StudentNo,CString CourseName, CString CourseNum,CString CourseTerm CString CoursePoint, CString CourseTime);//向链表中加入对应课程信息
};
另外,定义了全局变量:
CStudentList m_List;//用来保存学生的各项数据
CString Term;//用来存放学生的注册学期,用来将注册的学期信息加入链表(开始时,AddNode函数中忘记加入m_Term变量了)
CString Num;//为了在查看课程信息时,对话框里的内容能够方便的传入子对话框中 CStudent* FindNode(CString StuNo);//根据学号查找节点
六、测试数据
以下为程序初步运行后保存至文件中的内容:
2009-***091许亚军男 能源与环境学院 ***M9
110100首修高等数学5.0
2009-201048课时111100首修
2009-201048课时大学物理3.0 2009-201048课时112100首修C++2.0 111100首修大学物理3.0 男
2009-201048课时
2009-***091周帆能源与环境学院110M9
111100首修大学物理3.0 2009-201048课时11299首修C++2.0 2009-201048课时
2009-***091雒志强男
2009-201048课时能源与环境学院10086M9
112100首修C++2.0 2009-***091杨宗冰男
能源与环境学院119M9
112100首修C++2.0 2009-201048课时2009-***091XX女建筑学院XXXXXX
11055补考高等数学5.0 2009-201048课时1110重修大学物理3.0 2009-201048课时112100首修2009-201048课时 C++2.0
七、运行情况分析
输入数据测试后,生成包含以上内容的文件。整个过程顺利,程序可以正确运行,未出现重大错误,各项功能也都可以实现。可将生成的文件另外保存,从而录入新的数据(如其他学期的学生信息),而在查询时,可以根据需要查询的不同学期的信息来载入不同的文件。
八、设计小结
在程序设计过程中遇到了不少问题,很多都是因为之前的想法没有完全照顾到全局,使得后来要大幅度的修改代码,或者用较为复杂的代码来弥补。所以,较大的程序设计,最重要的就是一定要有大局观,在设计初期就要将自己的目标、思路理清,最好做下记录,而且做每一步的同时也必须想到后面的很多步,否则到后来很可能会因为之前的缺陷而做不下去,或者不得不放弃某些功能。另外,对于程序编写本身,我发现需要注意的部分是文件的保存及载入,这部分的每一个代码都需要仔细斟酌,否则很可能出现在编译时没问题,而运行时出错的状况。而一旦出现这种情况,就必须通过恰当的方法寻找出问题所在,如注释某些最近写的代码、利用消息框弹出某些变量的值,从而判断其与设想是否相符等方法,而不能盲目的查看所有代码,慢慢找或者索性手足无措了。
九、心得体会
这是我第一次尝试做比较大的程序,所以从中学到的还是很多的。首先,我发现我对程序设计还是很感兴趣的,很喜欢去钻研;其次,在设计及编程的过程中,通过发现问题、解决问题,我自己总结出来了不少方法,也发现了编写时所必须注意和避免的错误,可以让以后少走弯路。这些都是对于程序设计本身,此中的心得当然有很多,我也无法一一列举出来,而最重要的是我从其中学到了一些程序设计之外的东西。我深切的体会到了全局思想的重要性,无论干什么,基本上都得有这种思想,每走一步都必须想到以后的路,必须想到这一步是为什么而走的,为什么目标而服务的。只有这样,才能慢慢的稳健的走向自己的目标,不会在某一点上突然发现自己走不下去了,发现之前的某一步将自己带上的崎岖的路,而不得不往回走去弥补之前的过错或者干脆拐上另一条不明方向的道路。另外,前进的过程中,当遇到问题时,必须通过恰当的方法去发现起源,然后解决,而不要盲目的去寻找或者毫无对策了,必要的时候也得求助他人。而在一步步解决问题的过程中,也必须学会自己总结,以避免以后再次遇上相同错误时再走弯路。
总之,这次的课程设计给了我很大帮助,如果有机会,我便会选择向这方面去深入发展。
参考资料
1、《C++课程设计》
2、《C++程序设计》 提交日期 2010-9-16 星期四
朱金付 何铁军 朱萍 郑雪清 徐冬梅 编著
朱金付 主编
第三篇: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课程设计题目
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课程设计教学和任务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.完整的源程序代码。(学生设计完成)