版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、程序设计课程设计指导书软件学院 计算机工程系2016年6月15日前 言程序设计课程设计是计算机科学与技术专业的重要实践性课程。目的在于培养学生分析问题和解决问题的能力,为学生提供了一个既动手又动脑,独立实践的机会。将课本上的数据结构、离散数学和C语言的理论知识和实际应用问题进行有机结合,提高学生程序设计、程序调试及项目开发能力。为后续课程: 操作系统、软件工程,编译原理等课程的学习奠定必要的实践基础。本课程设计是利用数据结构、离散数学、C语言理论和实验课中学到的编程知识和编程技巧,通过布置具有一定难度、一定编程量的课程设计题目,利用C语言作为开发工具,使学生通过课程设计掌握高级编程语言的知识和
2、编程技术,掌握程序设计的思想和方法,初步具备利用计算机求解实际问题的能力。通过程序设计课程设计课程的学习,能够帮助学生加深理解数据结构、离散数学、C语言基本概念,达到培养学生良好程序设计的习惯和运用 C 语言编写程序解决实际问题的能力。使学生学会把书本知识用于解决实际问题,起到深化理解和灵活掌握教学内容的目的。同时使学生在程序设计方法及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。通过该课程设计,学生应该掌握C或C+语言程序设计的方法、数据结构和离散数学理论知识,熟悉C或C+程序的开发环境及C或C+程序的调试过程,巩固和加深对理论课中知识的理解,提高学生对所学知识的综合运用能力;学
3、生应该具有如下基本技能:培养学生查阅参考资料、手册的自学能力,通过独立思考深入钻研问题,学会自己分析、解决问题。通过对所选题目方案分析比较,确立方案,编制程序与调试程序。能熟练调试程序,在教师的指导下,完成课题任务。根据个人的设计调试过程,按课程设计报告的要求撰写设计报告。选用教材及主要参考书:1 教材呼克佑. C语言程序设计 电子工业出版社,2013严蔚敏. 数据结构(C语言版) 清华大学出版社,2012目 录前 言1一课程设计报告要求1二课程设计报告示例迷宫问题(参考)2三设计题目(6选4)81消除类游戏82数字统计93画 图104构造可以使n个城市连接的最小生成树125送 货136学生管
4、理系统15 一课程设计报告要求课程设计报告封面应给出专业、班级、姓名、学号、指导教师和完成日期,报告开头给出题目,内容包括以下几项:1【问题描述】简要描述问题,然后说明程序设计的任务,程序要做什么。明确规定以下内容:(1) 输入的形式和输入值的范围;(2) 输出的形式;(3) 程序所能达到的功能;(4) 测试数据:包括正确的输入及其输出结果和含有错误的输入及其输出结果。2【问题分析】分析问题,简述解决的思想或方法,最好给出解决问题的流程主程序的流程;若涉及到多个函数模块,还要给出模块之间的调用关系。实现设计中定义的所有数据类型,对每个操作写出伪码算法,对主程序和其他函数模块也写出伪码算法(伪码
5、算法的详细程度为按照伪码算法可以在计算机键盘直接输入高级程序设计语言程序)。3【功能实现】(用C或C+描述)/说明:用C或C+写出所有程序代码。4【实例测试及运行结果】列出测试结果,包括输入和输出。测试数据应该完整、严格。测试分析内容包括:(1) 测试过程中遇到的问题是如何解决的以及对设计与实现的回顾讨论与分析;(2) 算法的时空分析和改进设想;(3) 经验和体会。5【心得体会】谈谈在设计和调试过程中的收获。二课程设计报告示例迷宫问题(参考)专业:_ 班级:_ 姓名:_ 学号:_ 完成日期:_【问题描述】编制一个求解迷宫通路的程序。以一个m*n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍
6、。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。首先实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。求得的通路以三元组(i,j,d)的形式输出,其中:(i,j)指示迷宫中的一个坐标,d 表示走到下一坐标的方向。如:对于下列数据的迷宫,输出的一条通路为:(1,1,1),(1,2,2),(2,2,2),(3,2,3),(3,1,2)【问题分析】(1)以二维数组MAZEM+2N+2表示迷宫,其中:MAZE0J和MAZEM+1J(0JN+1)及MAZEI0和MAZEIN+1(0IM+1)为添加的一圈障碍。数组中以元素值为0表示通路,1表示障碍。限
7、定迷宫的大小M,N10。(2)用户以文件的形式输入迷宫的数据:文件中第一行的数据为迷宫的行数M和列数N;从第2行至第M+1行(每行N个数)为迷宫值,同一行中的两个数字之间用空白字符相隔。(3)迷宫的入口位置和出口位置可由用户随时设定。(4)若设定的迷宫存在通路,则以长方阵形式将迷宫及其通路输出到标准输出文件(即终端)上,其中,字符“#”表示障碍,字符“*”表示路径上的位置,字符“”表示“死胡同”,即曾经经过但不能到达出口的位置,其余用空格符表示。若设定的迷宫不存在通路,则报告相应信息。(5)本程序只求出一条成功的通路。然而,只需要对迷宫求解的函数作小量修改,便可求得全部路径。【功能实现】(用C
8、或C+语言描述)设计如下:1坐标位置类型typedef structint r,c; /迷宫中行、列的范围PosType;2迷宫类型typedef struct int m,n; char arrRANGERANGE; /各位置取值 ,#,或*MazeType;void InitMaze(MazeType &maze,int a,int row,int col);/按照用户输入的row行和col列的二维数组(元素值为0或1)/设置迷宫的初值,包括加上边缘一圈的值bool MazePath(MazeType &maze,PosType start,PosType end);/求解
9、迷宫maze中,从入口start到出口end的一条路径/若存在,则返回TRUE;否则返回FALSEvoid PrintMaze(MazeType maze);/将迷宫以字符型方阵的形式输出到标准输出文件上3栈类型typedef structint step; /当前位置在路径上的“序号”PosType seat; /当前的坐标位置directiveType di; /往下一坐标位置的方向ElemType; /栈的元素类型typedef struct NodeTypeElemType data;NodeType *next;NodeType,*LinkType; /结点类型,指针类型typede
10、f structLinkType top;int size;Stack; /栈类型栈的基本操作设置如下:void InitStack(Stack &S)/初始化,设S为空栈(S.top=NULL)void DestroyStack(stack &S)/销毁栈S,并释放所占空间void ClearStack(Stack &S)/将S清为空栈int stackLength(Stack S)/返回栈S的长度S.sizeStatus StackEmpty(Stack S)/若S为空栈(S.top=NULL),则返回TRUE;否则返回FALSEStatus GetTop(Stac
11、k s,ElemType e)/若栈S不空,则以e带回栈顶元素并返回TRUE,否则返回FALSE;Status Push(Stack &S,ElemType e) /若分配空间成功,则在S的栈顶插入新的栈顶元素e,并返回TRUE,/否则栈不变,并返回FALSEStatus Pop(Stack &S,ElemType &e)/若栈不空,则删除S的栈顶元素并以e带回其值,且返回TRUE /否则返回FALSEvoid StackTraverse(Stack s,Status(*visit)(ElemType e)/从栈底到栈顶依次对S中的每个结点调用函数visit其中部分操作
12、的算法:Status Push(Stack &S,ElemType e)/若分配空间成功,则在S的栈顶插入新的栈顶元素e,并返回TRUE;/否则栈不变,并返回FALSEif (MakeNode(p,e)p->next=s.top; s.top=p;s.size+; return TRUE;else return FALSE;Status Pop(Stack &S,ElemType &e)/若栈不空,则删除S的栈顶元素并以e带回其值,且返回TRUE,/否则返回FALSE,且e无意义if(StackEmpty(S) return FALSE;elsep=S.top;
13、S.top=S.top->next;e=p->date; S.size-; return TRUE; 4.求迷宫路径的伪码算法:Status MazePath(MazeType maze,PosType start,PosType end)/若迷宫中存在从入口start到出口end的通道,则求得一条存入在栈中/(从栈底到栈顶为从入口到出口的路径),并返回TRUE;否则返回FALSEInitStack(S); curpos=start; /设定“当前位置”为“入口位置”curstep=1; found=FALSE; /探索第一步doif (Pass(maze,curpos) /当前位
14、置可以通过,即是未曾走到过的通道块留下足迹FootPrint(maze,curpos); e=(curstep,curpos,1);Push(S,e); /加入路径if(Same(curpos,end) found=TRUE; /到达终点(出口)else curpos=NextPos(curpos,1); /下一位置是当前位置的东邻 curstep+; /探索下一步 /else/ifelse /当前位置不能通过if(!StackEmpty(S) Pop(S,e); while(e.di=4&&!StackEmpty(S)MarkPrint(maze,e,seat); Pop(S
15、,e); curstep-; /留下不能通过的标记,并退回一步/whileif(e.di<4) e.di+; Push(S.e); /换下一个方向探索 curpos=NextPos(e.seat,e.di); /设定当前位置是该新方向上的相邻块 /if /ifwhile(!StackEmpty(S)&&!found); return found;/MazePath5主函数和其他函数的伪码算法void main( ) /主程序 Initialization(); /初始化 do ReadCommand(cmd);/读入一个操作命令符 Interpret(cmd); /解释执
16、行操作命令符 while(cmd!=q&&cmd!=Q);/mainvoid Initialization() /系统初始化 clrscr();/清屏在屏幕上方显示操作命令清单: CreatMazec MazePathm PrintMazep Quitq;在屏幕下方显示操作命令提示框:/Initializationvoid ReadCommand(char &cmd) /读入操作命令符显示键入操作命令符的提示信息; do cmd=getche()while(cmdc,C,m,M,p,P,q,Q);/ReadCommandvoid Interpret(char cmd)/
17、解释执行操作命令switch(cmd) case c,C:提示用户输入“迷宫数据的文件名filename”;从文件读入数据分别存储在rnum,cnum和二维数组a2中; InitMaze(ma,a2,rnum,cnum); / 创建迷宫 输出迷宫建立完毕的信息 break;casem,M:提示用户输入迷宫的入口from和出口 term的坐标位置; if(MazePath(ma,from,term)/存在路径提示用户察看迷宫;else 输出该迷宫没有从给定的入口到出口的路径的信息;break;casep,P:PrintMaze(ma): /将标记路径信息的迷宫输出到终端/switch/Inter
18、Pret附录:源程序文件名清单:base.H /公用的常量和类型stkpas.H /栈类型maze.H /迷宫类型testmaze.C /主程序【实例测试及运行结果】迷宫的测试数据如下:左上角(1,1)为入口,右下角(9,8)为出口。001000100010001000001101011100100001000001000101011110011100010111000000提示:当入口位置为(1,1),出口位置为(9,8)时,输出数据应为: *#*#*#*#*#*#*#*#*#*#*测试结果示例:三组测试数据和输出结果分别如下:1输入文件名为:m1.dat,其中迷宫数据为:3 20 00 0
19、0 0入口位置:1 1出口位置:3 2求解路径后输出的迷宫:*2输入文件名:m2.dat,其中迷宫数据为:3 40 0 0 0 0 0 1 1 0 0 0 0入口位置:1 1出口位置:3 4求解路径后输出的迷宫:*#*3输入文件名:m3.dat,其中迷宫数据同题目中的测试数据。入口位置:1 1出口位置:9 8求解路径后输出的迷宫正确,并和需求分析中所列相同。4输入文件名:m4.dat,其中迷宫数据为:4 90 0 0 0 0 0 1 0 0 0 1 0 0 0 1 0 0 00 0 1 1 1 0 0 1 10 0 1 1 1 0 1 0 0入口位置:1 1出口位置:4 9输出信息为:此迷宫从
20、入口到出口没有路径。【心得体会】1本次作业比较简单,只有一个核心算法,即求迷宫的路径,所以总的调试比较顺利,只在调试MazePath算法时,遇到两个问题:其一是,起初输出的迷宫中没有加上的记号,后发现是因为在MarkPrint函数中的迷宫参数丢失“变参”的原因;其二是,由于回退时没有将curpos随之减一,致使栈中路径上的序号有错。2栈的元素中的step域没有太多用处,可以省略。3StackTraverse在调试过程中很有用,它可以插入在MazePath算法中多处,以察看解迷宫过程中走的路径是否正确,但对最后的执行版本没有用。4本题中三个主要算法:InitMaze,MazePath和Print
21、Maze的时间复杂度均为0(m*n),本题的空间复杂度亦为0(m*n)(栈所占最大空间)5经验体会:借助DEBUG调试器和数据观察窗口,可以加快找到程序中疵点。【选作内容】(1) 编写递归形式的算法,求得迷宫中所有可能的通路;(2) 以方阵形式输出迷宫及其通路。三设计题目(6选4)1 消除类游戏1.1【问题描述】消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消除。当有多处可以被消除时,这些地方的棋子将同时被消除。1.2【基本要求】现在给你一个n行m列的棋
22、盘(1n,m30),棋盘中的每一个方格上有一个棋子,请给出经过一次消除后的棋盘。请注意:一个棋子可能在某一行和某一列同时被消除。输入数据格式:输入的第一行包含两个整数n, m,用空格分隔,分别表示棋盘的行数和列数。接下来n行,每行m个整数,用空格分隔,分别表示每一个方格中的棋子的颜色。颜色使用1至9编号。输出数据格式:输出n行,每行m个整数,相邻的整数之间使用一个空格分隔,表示经过一次消除后的棋盘。如果一个方格中的棋子被消除,则对应的方格输出0,否则输出棋子的颜色编号。1.3【测试数据】为方便调试程序,可将输入数据先写入一个文本文件,然后从文件读取数据处理,这样可避免每次运行程序时都要从键盘输
23、入数据。测试数据一输入:输出:4 52 2 3 1 23 4 5 1 42 3 2 1 32 2 2 4 42 2 3 0 23 4 5 0 42 3 2 0 30 0 0 4 4输出说明:棋盘中第4列的1和第4行的2可以被消除,其他的方格中的棋子均保留。测试数据二输入:输出:4 52 2 3 1 23 1 1 1 12 3 2 1 32 2 3 3 32 2 3 0 23 0 0 0 02 3 2 0 32 2 0 0 0输出说明:棋盘中所有的1以及最后一行的3可以被同时消除,其他的方格中的棋子均保留。2 数字统计2.1【问题描述】某次科研调查时得到了n个自然数,每个数均不超过1500000
24、000(1.5*109)。已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。2.2【基本要求】现给你n个自然数,统计这些自然数中每个不相同数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。输入数据有n+1行。第1行是整数n(1n200000),表示自然数的个数;第2n+1行每行一个自然数。输出有m行(m为n个自然数中不相同数的个数),按照自然数从小到大的顺序输出。每行输出两个整数,分别是自然数和该数出现的次数,其间用一个空格隔开。2.3【测试数据】为方便调试程序,可将输入数据先写入一个文本文件,然后从文件读取数据处理,这样可
25、避免每次运行程序时都要从键盘输入数据。输入输出82424510021002 34 25 1100 2 由于数据量可能很大,要注意程序的运行效率。2.4【实现提示】定义顺序表,元素类型为:Element,顺序表类型为:SeqList,用顺序表的数组data记录自然数和该数出现的次数。定义如下: typedef struct data long int number; long int count; Element;typedef struct listElement data10000; /*存储自然数和该数出现的次数*/int length; /*存储不同自然数的个数,即顺序表的长度*/ Se
26、qList;对输入的每一个数据,在顺序表中查找,若存在,则该数出现次数增,否则将该数插入顺序表中,出现次数为,插入后使顺序表中的数据按自然数有序。3 画 图3.1【问题描述】用 ASCII 字符来画图是一件有趣的事情,并形成了一门被称为 ASCII Art 的艺术。例如,下图是用 ASCII 字符画出来的 CSPRO 字样。._._._._._./._/._|._.|._./._.|.|._.|.|_).|.|_).|.|.|.|.|_._).|._/|._.<|.|_|.|._|_/|_|.|_|._/.3.2【基本要求】实现一个用 ASCII 字符来画图的程序,支持以下两种操作:画线
27、:给出两个端点的坐标,画一条连接这两个端点的线段。简便起见题目保证要画的每条线段都是水平或者竖直的。水平线段用字符 - 来画,竖直线段用字符 | 来画。如果一条水平线段和一条竖直线段在某个位置相交,则相交位置用字符 + 代替。填充:给出填充的起始位置坐标和需要填充的字符,从起始位置开始,用该字符填充相邻位置,直到遇到画布边缘或已经画好的线段。注意这里的相邻位置只需要考虑上下左右 4 个方向,如下图所示,字符 只和 4 个字符 * 相邻。.*.*.*.输入数据格式如下:第1行有三个整数m, n和q。m和n分别表示画布的宽度和高度,以字符为单位。q表示画图操作的个数。(2 m, n 100,0 q
28、 100)第2行至第q + 1行,每行是以下两种形式之一:0 x1 y1 x2 y2:表示画线段的操作,(x1, y1)和(x2, y2)分别是线段的两端,满足要么 x1= x2 且 y1y2,要么 y1=y2 且 x1x2。(0x1 ,x2<m,0y1 ,y2<n)。1 x y c:表示填充操作,(x, y)是起始位置,保证不会落在任何已有的线段上;c 为填充字符,是大小写字母。(0x<m,0y<n)。画布的左下角是坐标为 (0, 0) 的位置,向右为x坐标增大的方向,向上为y坐标增大的方向。这q个操作按照数据给出的顺序依次执行。画布最初时所有位置都是字符 .(小数点
29、)。输出数据格式如下:输出有n行,每行m个字符,表示依次执行这q个操作后得到的画图结果。3.3【测试数据】测试数据一输入:输出:4 2 31 0 0 B0 1 0 2 01 0 0 AAAAAA-A测试数据二输入:输出:16 13 90 3 1 12 10 12 1 12 30 12 3 6 30 6 3 6 90 6 9 12 90 12 9 12 110 12 11 3 110 3 11 3 11 4 2 C.+-+.|CCCCCCCC|.|CC+-+.|CC|.|CC|.|CC|.|CC|.|CC|.|CC+-+.|CCCCCCCC|.+-+.3.4【实现提示】用一个二维数组模拟画布:c
30、har canvas100100;定义划线函数:void drawline(char canvas100,int m,int n, int x1,int y1,int x2,int y2); 在宽度为m和高度n的画布上划线,(x1,y1)和(x2,y2)分别是线段的两端。定义填充函数:void fillchar(char canvas100,int m,int n, int x,int y,char b); 在宽度为m和高度n的画布上划线,(x,y)是填充的起始位置,b是填充的字母字符。定义输出画布函数:void printcanvas(char canvas100,int n,int m);
31、 输出宽度为m和高度n的画布上所画的图形。在主函数中定义画布,根据输入的数据划线或填充,最后输出画布上的图形。int main() char canvas100100,b; int i,k,x1,y1,x2,y2; int n,m,q; scanf("%d%d%d",&m,&n,&q); for(i=0;i<q;i+) scanf("%d",&k); if(k=0) scanf("%d%d%d%d",&x1,&y1,&x2,&y2);drawline(canvas,
32、m,n,x1,y1,x2,y2); else if(k=1) scanf("%d%d %c",&x1,&y1,&b);fillchar(canvas,m,n,x1,y1,b); printcanvas(canvas,n,m);4 构造可以使n个城市连接的最小生成树4.1【问题描述】给定一个地区的n个城市间的距离网,用Prim算法或Kruskal算法建立最小生成树,并计算得到的最小生成树的代价。4.2【基本要求】1、城市间的距离网采用邻接矩阵表示,邻接矩阵的存储结构定义采用课本中给出的定义,若两个城市之间不存在道路,则将相应边的权值设为自己定义的无穷大
33、值。2、要求在屏幕上显示得到的最小生成树中包括了哪些城市间的道路,并显示得到的最小生成树的代价。3、表示城市间距离网的邻接矩阵(要求至少6个城市,10条边)。4.3【测试数据】学生自主确定或参考图4-1。图4-1 一个带权图(网络)5送 货5.1【问题描述】为了增加公司收入,F公司新开设了物流业务。由于F公司在业界的良好口碑,物流业务一开通即受到了消费者的欢迎,物流业务马上遍及了城市的每条街道。然而,F公司现在只安排了小明一个人负责所有街道的服务。任务虽然繁重,但是小明有足够的信心,他拿到了城市的地图,准备研究最好的方案。城市中有n个交叉路口,m条街道连接在这些交叉路口之间,每条街道的首尾都正
34、好连接着一个交叉路口。除开街道的首尾端点,街道不会在其他位置与其他街道相交。每个交叉路口都至少连接着一条街道,有的交叉路口可能只连接着一条或两条街道。5.2【基本需求】小明希望设计一个方案,从编号为1的交叉路口出发,每次必须沿街道去往街道另一端的路口,再从新的路口出发去往下一个路口,直到所有的街道都经过了正好一次。输入数据格式输入的第一行包含两个整数n, m(1n10, n-1m20),表示交叉路口的数量和街道的数量,交叉路口从1到n标号。接下来m行,每行两个整数a, b,表示和标号为a的交叉路口和标号为b的交叉路口之间有一条街道,街道是双向的,小明可以从任意一端走向另一端。两个路口之间最多有
35、一条街道。输出输出格式如果小明可以经过每条街道正好一次,则输出一行包含m+1个整数p1, p2, p3, ., pm+1,表示小明经过的路口的顺序,相邻两个整数之间用一个空格分隔。如果有多种方案满足条件,则输出字典序最小的一种方案,即首先保证p1最小,p1最小的前提下再保证p2最小,依此类推。如果不存在方案使得小明经过每条街道正好一次,则输出一个整数-1。5.3【测试数据】测试数据一输入:输出:4 51 21 31 42 43 41 2 4 1 3 4输出说明:城市的地图和小明的路径如下图所示。测试数据二输入:输出:4 61 21 31 42 43 42 3-1输出说明:城市的地图如下图所示,
36、不存在满足条件的路径。6学生管理系统6.1【问题描述】大学里有各种类型的学生,校方需要对这些学生的信息进行计算机管理。所开发的软件应包括各类学生的添加、修改、删除和查找等功能。考虑到软件的可重用性、可扩展性和可维护性,校方决定采用面向对象的程序设计方法来开发系统。学生信息需要以文件方式保存到计算机硬盘中。另外,系统的用户界面应该尽可能友好,方便用户使用。6.2【设计需求及分析】(1) 使用C+语言开发,充分利用面向对象程序设计的类、对象、继承、封装和多态性等(2) 概念来设计和实现该管理系统。(3) 设计一个Person(人员)类,考虑到通用性,只抽象出所有类型人员都具有的属性:name(姓名
37、), id(身份证号),gender(性别),birthday(出生日期)等等。其中“出生日期”为内嵌子对象,是一个Date(日期)类型,Date类具有属性: year(年),month(月),day(日)。用成员函数实现对人员信息的录入和显示等必要功能操作。(4) 从Person类派生出Student(学生)类,添加属性: studentNo(学号),schoolName(学校),classIn (班级)。从Person类派生出Teacher(教师)类,添加属性:teacherNo(教师编号),schoolName(学校),department(部门)。(5) 从Student类中派生出Un
38、derGraduate(本科生)类,添加属性:major(专业)。从Student类中派生出Graduate(研究生)类,添加属性:direction(研究方向),adviserName(导师姓名)。(6) 从Graduate类和Teacher类派生出T(助教博士生)类。(7) 写程序测试上述各类,看能否正常运行。(8) 构建必要的辅助类,实现对本科生、研究生和助教博士生的添加、修改、删除、查询管理。(9) 根据需要定义类的构造函数、析构函数、拷贝构造函数、成员函数。必要时重载函数。(10) 要求将Person类设置为虚基类,以消除其派生类成员访问的二义性问题(注意在虚基类各级派生类的构造函数
39、实现时调用虚基类的构造函数)。(11) 要求在Person类中定义虚函数displayDetails(),用于显示当前对象的信息;同时定义虚函数inputData( ),用于从键盘获取当前对象的信息。Person类所有派生类也要定义同名虚函数,使程序可以实现动态多态性。(12) 用菜单方式设计主控模块程序。(13) 对程序源代码要给出各部分的详细注释,这也是该题目的考核重点之一。(14) 用UML语言描述系统用到的类及其关系。6.3【设计功能的实现】(用C或C+语言描述)/说明:此内容由学生自己设计完成。/以下代码仅供参考。程序框架:/*Copyright (C), 2010, TyutFil
40、e name: main.cppAuthor: gaobaolu Version: 1.0 Date: 2010.6.28Description: 应用程序主函数 */#include <cstdlib>#include <iostream>#include "date.h"#include "person.h"#include "student.h"#include "teacher.h"#include "undergraduate.h"#include "
41、graduate.h"#include "ta.h"#include "undergraduateManager.h"using namespace std;int main(int argc, char *argv) int choiceN;UndergraduateManager unMan; cout<<"*"<<endl; cout<<"*|*| |*|*"<<endl; cout<<"*|*| 欢迎您使用学生管理系统 |*|*
42、"<<endl; cout<<"*|*| |*|*"<<endl; cout<<"*"<<endl; do cout << "<->" << endl; cout << " n tt 1:本科生管理 " cout << " n tt 2:研究生管理 " cout << " n tt 3.助教博士生管理 " cout << &
43、quot; n tt 0:离开 " cout << endl; cout << "<->" << endl; cout << "请选择:" << endl; cin >> choiceN; switch(choiceN) case 1: unMan.dataManage(); break; case 2: / break; case 3: / break; default: break; while(choiceN!=0); cout<<"
44、 *"<<endl; cout<<"*|*| 感谢使用学生管理系统 |*|*"<<endl; cout<<" *a"<<endl;/*Copyright (C), 2010, TyutFile name: undergraduateManager.hAuthor: gaobaolu Version: 1.0 Date: 2010.6.28Description: 本科生管理类 */#ifndef UNDERGRADUATE_MANAGER_H#define UNDERGRADUATE_
45、MANAGER_H#include <iostream>#include <string>#include <fstream>#include "undergraduate.h"using namespace std;/* Define a Class : UndergraduateManager 本科生管理类*/class UndergraduateManager private: int top; /记录指针 Undergraduate undergraduates100; /本科生记录 public: UndergraduateMa
46、nager();/构造函数,将Undergraduate.txt读到undergraduates中 int queryByNo(string sno);/按本科生号查找 /找到:返回数组下标/没找到:返回-1 void clearStudent(); /删除所有本科生信息 int addStudent(Undergraduate s); /添加本科生,需要先查找是否存在 int modifyStudent(string sno); /修改学生信息 ,需要先查找是否存在 int deleteStudent(string sno);/删除本科生,删除前先查找其是否存在 int queryStude
47、nt(string sno);/查找本科生,查到则显示,否则提示未查到 void displayAll();/输出所有本科生信息 void dataManage(); /本科生库维护 void dataSave(); void dataRead(); UndergraduateManager();/析构函数,将undergraduates写入Undergraduate.txt文件中;/构造函数,将Undergraduate.txt读到undergraduates中 UndergraduateManager:UndergraduateManager() dataRead(); /按本科生号查找/
48、找到:返回数组下标/没找到:返回-1 int UndergraduateManager:queryByNo(string sno) for(int i=0;i<=top;i+) if (undergraduatesi.getStudentNo()=sno) return i; return -1; /删除所有本科生信息 void UndergraduateManager:clearStudent() top=-1;/添加本科生,需要先查找是否存在int UndergraduateManager:addStudent(Undergraduate s) int p=queryByNo(s.getStudentNo(); if (p=-1) top+; undergraduatestop= s; dataSave();/保存 return 1; else cout<<"->此学生已经存在 !<-"<<endl<<endl; return 0; /修改科生,删除前先查找其是否存在int UndergraduateManager:mod
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高中生物 重点强化练41 伴性遗传常规题型的推导方法(二)
- 相等关系与不等关系-高一上学期数学课时作业人教版A版(含解析)
- 村庄维稳应急预案(3篇)
- 模板专项施工方案实施(3篇)
- 江苏建筑电气施工方案(3篇)
- 洛阳轻质墙施工方案(3篇)
- 清洁生产审核-应急预案(3篇)
- 瓷砖分类及施工方案(3篇)
- 病理标本遗失应急预案(3篇)
- 空压机停水应急预案(3篇)
- 2025年乌鲁木齐市法院系统招聘聘用制书记员笔试真题
- 《无人机应用技术概论》单元5 无人机低空交通法规与管理体系
- 幼儿园班会感恩课件
- 2026年湖南长沙市社区工作者考试真题及答案
- 银行网点装修工程施工组织设计
- 2026年党员引领生态环境保护制度建设方案
- 施工现场临时排水施工方案
- 2026年医疗护理员职业技能竞赛重点培训试题及答案
- 2026年公共交通安全问题案例分享
- ISO9000-2026 质量管理基础与术语(中文版)
- 福建省百校2026届高三5月联考语文试卷(含答案)
评论
0/150
提交评论