课程设计
姓名:涂建龙
学号:201010510207 班级:计科二班
学院:信息工程学院指导老师:李娟、林卫忠
题目 1 通讯录管理**
一需求分析
1.1、问题描述
通讯录管理是一个比较实用的小型管理系统,该系统用于对通讯人员的姓名、电话号码的管理。该设计采用菜单作为应用程序的主要界面,用控制语句来改变程序执行的顺序,控制语句是实现结构化程序设计的基础。该设计的任务是利用一个简单实用的菜单,通过菜单项进行选择,实现和完成通讯录管理中常用的几个不同的功能。
1.2、要求
功能要求:
建立通讯录的链表;
添加通讯录;
删除联系人:
显示联系人;
删除联系人;
查询联系人;
关闭通讯录。
规定:输入通讯录的信息:编号、姓名、性别、电话、地址、QQ号、工作地点、工作单位,
界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
存储结构:利用单链表存储通讯录信息,同时要求将通讯信息相关数据存储在数据文件中。(数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构;
测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明。
二.概要设计
2.1 通讯录管理系统功能结构图:
2.2主函数流程图:
2.3详细设计:
关键代码
typedef struct
{
char name[10];//姓名
char sex[10];//性别
char birthday[20];//生日日期char cellphone[15];//手机号码char telephone[15];//电话号码char homeaddress[100];//家庭地址
char QQ[15];//QQ号码
char email[20];//电子邮件
char workspace[100];//工作单位
char workcity[100];//工作地址
} AddressList;
AddressList t[5][N];
AddressList e;
AddressList sl[5][3];
typedef struct relatives//定义单链表
{
AddressList data;
struct relatives *next;
} Address;
Address * h[5];
/*************************************************/ void menu();//一级菜单
void relatives();//亲人
void friends();//朋友
void classmates();//同学
void workmates();//同事
void others();//其他
1、主菜单截图
输入1进入亲人管理项
选择6显示菜单出现
返回主菜单选择5修改项
返回主菜单选择2添加项
返回主菜单选择3删除项
测试心得:
调试过程比较顺利,没有出现大的问题,主要有:
(1)对运行界面的优化调整,使得界面更加好看
(2)对程序中的一些显示错误进行修改,算法和调用方面没有错误。
(3)界面优化的过程是繁琐的,需要大量的时间精力。
(4)出现些小细节问题,经过询问同学获得帮助。
题目 4 迷宫求解
一需求分析
1.1、问题描述
可以输入一个任意大小的迷宫数据,用非递归的方法求出一条走出迷宫的路径,并将路径输出。
1.2、设计要求
在上交资料中请写明:存储结构、基本算法(可以使用程序流程图)、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法。
1.3、需求分析
1、本程序实现迷宫的探索过程. 以用户和计算机对话的方式,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运算命令,然后程序就探索路径并输出路径。
2、本演示程序中,输入形式以“回车符”为结束标志,且允许出现重复字符。
3、利用二维指针实现迷宫位置的存储,并用栈存贮探索路径,每个结点含三个整形变量。输入的形式以回车结束。
4、本程序中,用户可以读去文件里的迷宫,也可自己重新输入迷宫,而且用户可以输入任意大小的迷宫,然后程序自动探索路径,并输出迷宫的路径
2程序流程图
流程图
二.概要设计
关键代码
#include
using namespace std;
class T //定义描述迷宫中当前位置的结构类型
{
public:
int x; //x代表当前位置的行坐标
int y; //y代表当前位置的列坐标
int dir; //0:无效,1:东,2:南,3:西,4:北
};
class LinkNode //链表结点
{
friend class Stack;
public:
T data;
LinkNode *next;
};
class Stack
{
private:
LinkNode *top; //指向第一个结点的栈顶指针
public:
Stack(); //构造函数,置空栈
~Stack(); //析构函数
void Push(T e); //把元素data压入栈中
T Pop(); //使栈顶元素出栈
T GetPop(); //取出栈顶元素
void Clear(); //把栈清空
bool empty(); //判断栈是否为空,如果为空则返回1,否则返回0 };
Stack::Stack() //构造函数,置空栈
{
top=NULL;
}
Stack::~Stack() //析构函数
{
}
测试截图
输入以下数据:0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 1 1 0 1 0 1 1 1 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 1
0 1 1 1 1 0 0 1
1 1 0 0 0 1 0 1 1 1 0 0 0 0 0 0 运行结果:
输入以下数据:
0 0 1 1 1 0
1 1 0 0 1 1
0 1 1 0 0 0
1 0 0 1 1 0
1 1 0 0 1 1
0 0 1 1 1 0
题目17 排序查找数据
一需求分析
1、问题描述:
文件中有一组无序的数据,先排序为有序序列,再进行数据查找,排序后的结果保存为文件。
2、设计要求:
1、要求从文件中读取无序数据;
2、选择已学的排序算法,尽量选用高效的算法;
3、排序后的数据要求保存至另外一个文件中;
4、选用二分查找算法查找数据,提示查找结果;
二.概要设计
关键代码
#include "stdio.h"
#include "string.h"
int search (int b[],int key,int n) {int high,mid,low,rs=0;
low=1;high=n;
while(low<=high)
{mid=(low+high)/2;
if(key
if(key>b[mid])low=mid+1; else
{rs=mid;break;}
}
return(rs);
}
void selectsort(int r[],int n) {int i,j,k,temp,t;
for(i=0;i {k=i; for(j=i+1;j if(r[j] if(k!=i) {temp=r[i];r[i]=r[k];r[k]=temp;} for(t=0;t printf("%d ",r[t]); printf("\n"); } } void main() {int a[10]; int t,f; printf("input to numbers \n"); for(t=0;t<10;t++) scanf("%d",&a[t]); printf("\n"); selectsort(a,10); printf("the serch key: \n"); scanf("%d",&f); t=search (a,f,10); printf("\n"); printf("the position is: \n"); printf("%d",t+1); } 测试截图 输入以下数据: 23 45 62 38 84 47 26 89 15 32输入23 实验心得体会 经过两个星期的上机实践学习,使我对C++语言和数据结构知识有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,通过实践,我也发现我的好多不足之处,通过实践,使我在很多方面的认识有所提高。 初次感觉编程的过程中也挺有乐趣,但是在和同学讨论的过程中发现基础知识还是不扎实,需要进行加工和练习。对编程也还是充满自信的,我能想到的我就能这个工具把它实现,借助别人的东西也行。有些东西只要你想得到,你就可以让计算机为你做得漂亮和完美。通过这次的学习锻炼,进一步对用C++语言编程更熟悉了。也比较顺手了,发现编程不怕做不到,只怕想不到/ 还对以前学到的知识进一步巩固和加深了理解。 通过实习我的收获如下 1、巩固和加深了对数据结构的理解,提高综合运用本课程所学知识的能力。 2、培养了我选用参考书,查阅手册及文献资料的能力。培养独立思考,深入研究,分析问题、解决问题的能力。 3、通过实际编译系统的分析设计、编程调试,掌握应用软件的分析方法和工程设计方法。 4、通过课程设计,培养了我严肃认真的工作作风,逐步建立正确的生产观念、经济观念和全局观念。 根据我在实习中遇到得问题,我将在以后的学习过程中注意以下几点: 1、认真上好专业实验课,多在实践中锻炼自己。 2、写程序的过程中要考虑周到,严密。 3、在做设计的时候要有信心,有耐心,切勿浮躁。 4、认真的学习课本知识,掌握课本中的知识点,并在此基础上学会灵活运用。 5、在课余时间里多写程序,熟练掌握在调试程序的过程中所遇到的常见错误,以便能节省调试程序的时间。