C++ 学生信息管理系统呀!!!! 求哪个高手给搞一篇实验汇报啊

就是要一篇实验报告!

//大概这样 你改改
通过本次的课程设计,使我初步地掌握数据结构的知识以及编程的方法,更进一步培养了对数据结构这门课程的兴趣。在编程的过程中边复习边进行设计,把遗漏的知识点补上。这次课程设计,使我深深地体会到,如果要自己编一个程序,首先就要能看熟悉书里的基本知识,好高骛远的做法在编程上更是不允许的。在课程设计中遇到的问题大部分都是一些小问题,一些平时不曾注意以及遗忘的知识点。要做好程序要从平时的点点滴滴做起。这些问题很多都是C语言所涉及到的知识,使我认识到要学好《数据结构》课程必须要有扎实的C语言基础
数据结构是计算机科学及相关专业的重要核心课程,主要研究如何合理组织数据。通过这次课程设计,我也体会要设计一个优秀的程序是一件不容易的事。数据结构课程的目的是设计不是仅能运行的程序,它要求我们选择合适的存储结构。

通讯录:

a)需求分析:
任务:1)菜单要求,运行程序后,给出6个菜单项的内容和输入提示(TC2.0):
1. 通讯录链表的建立
2. 通讯录链表的插入
3. 通讯录链表的查询
4. 通讯录链表的删除
5. 通讯录链表的输出
0. 退出管理系统
请选择0-5:

2)设计要求
使用数字0-5来选择菜单项,其他输入则不起作用。
b)概要设计:
存储结构:本题采用单链表存储结构
存储结构说明:设链表节点仅含有一个数据域和一个指针域。数据域是为了描述通讯者的相关信息。它的类型可定义如下:
typedef struct{
char num[5]; //编号
char name[9]; //姓名
char sex[3]; //性别
char phone[13];//电话
char addr[31];//地址
}DataType;
线性表的链式存储结构定义如下:
typedef struct node{
DataType data;
struct node* next;
}ListNode;;

算法描述:

c)详细设计:
源程序:
//通讯录
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#define T 1
#define M 1000
struct DataType
{
int num; //编号
char name[M]; //姓名
char sex[M]; //性别
char phone[M];//电话
char addr[M];//地址
};

struct node
{
DataType data;//数据
struct node* next;//指针
}*h,*r,*q;

void create()//建立
{
h=new node;
h->next=NULL;
r=h;
node *p=new node;
char key;
//cin>>key;
key=getch();
do{
cout<<"编号:";
cin>>p->data.num;
cout<<"姓名:";
cin>>p->data.name;
// cin.get(p->data.name,M);
cout<<"性别:";
cin>>p->data.sex;
cout<<"电话:";
cin>>p->data.phone;
//cin.getline(p->data.phone,M);
cout<<"地址:";
cin>>p->data.addr;
r->next=p;
p->next=NULL;
r=p;
cout <<"\n\n\t\t****继续添加(0/1)********"<<endl;
key=getch();
}while(key=='1');
}

void insert(int i)//插入
{
//char Name,Sex,Phone,Addr;
node *p, *q;
p=h;
int j=0;
while(p!=NULL&&j<i)
{
p=p->next;
++j;
}
if(!p||j>i)
cout<<"\n\n\t\t^⌒^位置错误!"<<endl;
else
q=new node;
cout<<"输入插入人的信息:";
cout<<"编号:";
cin>>i;
q->data.num=i;
cout<<"姓名:";
cin>>q->data.name;
cin.get(q->data.name,M);
cout<<"性别:";
cin>>q->data.sex;
cin.get(q->data.sex,M);
cout<<"电话:";
cin>>q->data.phone;
cin.get(q->data.phone,M);
cout<<"地址:";
cin>>q->data.addr;
cin.get(q->data.addr,M);
//q->data.addr[31]=Addr ;
q->next=p->next;
p->next=q;
while(q->next!=NULL)
{
q=q->next;
q->data.num++;
}
}

void deletenode(int i)
{
int j=0;
node *p,*q;
p=h;
if(i!=0)
{
while(p!=NULL&&j<i-1)
{
p=p->next;
++j; //j为计数器
}

if(p==NULL||j>i-1)
cout<<"\a"<<"^⌒^未找到位置,请确认后重试!"<<endl;
else
{
q=p->next;
p->next=q->next;
delete(q);
cout <<"\t\t删除成功!!"<<endl;
}
}
else
{
h=p->next;
delete(p);//释放
cout <<"\t\t删除成功!!"<<endl;
}
}

void search(int e)//查找
{
node *p;
p=h;
while ((p!=NULL)&&(p->data.num!=e))
{
p=p->next;
}
if(p==NULL)
cout<<"\t\t^⌒^抱歉!未能找到!!"<<endl;
else
{
cout<<"\t\t"<<endl;
cout <<"\n\t----------------------查找成功!!-----------------------"<<endl;
cout<<"\t编号\t姓名\t性别\t电话\t地址"<<endl<<"\t"
<<p->data.num<<"\t"
<<p->data.name<<"\t"
<<p->data.sex<<"\t"
<<p->data.phone<<"\t"
<<p->data.addr<<endl;
cout <<"\t-------------------------------------------------------"<<endl;
}
}

void output()
{
node *p=h->next;
cout <<"\n\t------------------------通讯录-------------------------"<<endl;
cout <<"\t编号\t姓名\t性别\t电话\t地址"<<endl;
while(p!=NULL)
{
cout<<"\t"
<<p->data.num<<"\t"
<<p->data.name<<"\t"
<<p->data.sex<<"\t"
<<p->data.phone<<"\t"
<<p->data.addr<<"\t"
<<endl;
p=p->next;
}//while
cout <<"\t-------------------------------------------------------"<<endl;
}

void main()
{
int a,b,c;
char key;
while(T){
cout <<"\n\n\n";
cout <<"\t------======通讯录=======---------\n";
cout <<"\t**\t5输出.\n";
cout <<"\t**\t4删除.\n";
cout <<"\t**\t3查询.\n";
cout <<"\t**\t2插入.\n";
cout <<"\t**\t1建立.\n";
cout <<"\t**\t0退出."<<endl;
cout <<"\t------===================-------\n\n\t\t"<<endl;
key=getch();
switch(key){
case('1'):
case('!'):
create();
break;
case('2'):
case('@'):
cout<<"\t\t\t输入要插入的位置:";
cin>>a;
insert(a);
break;
case('3'):
case('#'):
cout<<"\n\n\t\t输入序号(查询):";
cin>>c;
search(c);
break;
case('4'):
case('$'):
cout<<"\n\n\t\t输入序号(删除):";
cin>>b;
deletenode(b);
break;
case('5'):
case('%'):
output();
break;
case('0'):
case(')'):
cout <<"\n\n\n\n\t\t**^O^欢迎再次光临**\n\n\n\n\n\n\t";
exit(0);
default:
cout <<"\n\t*******///^⌒^输入错误///********\n\n\n";
}//swich
}//while
}//main()

d).调试分析:

本程序的执行结果如下:
1) 初始界面:

2) 建立链表:
从键盘键入1,这时建立链表,并输入数据;完整输入数据后,可键入0退出或者键入1继续添加。如下:

3) 插入功能
在初始界面键入2,输入要插入的位置(位置不能比全部数据的数量大并且不能小于0)。否则将出现错误提示。正确输入位置之后,填写数据。具体如下:

输入错误位置,将得到出错提示:

4) 查询功能
选择3 查询。该功能是按照键入的编号查找的。因为这里主要是考查链表结构的实现,故只给出简单的查找功能。具体如下:

输入错误编号将得到出错提示,确认后重试

5) 删除功能
该功能主要是按输入的编号删除该编号所在结点,若编号不存在,将出现错误提示:

6) 输出功能:
该功能可以查看所有数据,即链表的遍历。键入5:

时间复杂度分析:
算法insert()、deletenode()、serch()的时间复杂度为O(m+n),output()的时间复杂度为O(n)

模块设计和调试时存在的问题:
1.查找功能只按编号查找,不支持其他方法查找;
2.程序没有排序功能,主要是考虑链表存储结构排序的时间复杂度过高;
3.在运行程序时,注意按照提示并正确输入。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2006-10-11
实验汇报主要是你得先做程序再汇报本回答被提问者采纳