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.在运行程序时,注意按照提示并正确输入。

实验汇报主要是你得先做程序再汇报

学生信息管理系统C~

#include
#include
#include
#include
#define NULL 0
#define LEN sizeof(struct student)
#define FILE_DATA_PATH "c:\student.txt"

struct student
{
long int num;
char name[20];
int age;
char sex[4];
char birthday[10];
char address[30];
long int tele_num;
char E_mail[20];
struct student *next;
};

int TOTAL_NUM = 0;
struct student *head = NULL;

void welcome();
void mainmenu();
void record();
void insert(struct student *stu);
void display(struct student *stu);
void displayAll();
void query();
void query_by_num();
void query_by_name();
void readData();
void writeData();
void freeAll();
void del();
void change();
void devise(struct student *p);

int main()
{
char userName[9];
char userPWD[7];
int i;
welcome();
for(i = 0; i < 3; i++)
{
printf("
管理员初始用户名和密码均为admin
");
printf("请输入您的用户名:");
scanf("%s", userName);

printf("
请输入您的密码:");
scanf("%s", userPWD);

if ((strcmp(userName,"admin")==0) && (strcmp(userPWD,"admin")==0))
{
//用户名和密码正确,显示主菜单
mainmenu();
break;
}
else
{
if (i < 2)
{
//用户名或密码错误,提示用户重新输入
printf("用户名或密码错误,请重新输入!");
}
else
{
//连续3次输错用户名或密码,退出系统。
printf("您已连续3次将用户名或密码输错,系统将退出!");
}
}
}
return 0;
}
//显示欢迎信息
void welcome()
{
printf("+---------------------------+
");
printf("| |
");
printf("| 欢迎使用学生信息管理系统 |
");
printf("| |
");
printf("+---------------------------+
");
}

//系统主菜单
void mainmenu()
{
int choice;
choice = -1;
readData();
printf("
温馨提示:为保证您的操作得到保存,请按正常顺序退出系统^_^
");
do
{
printf("


");
printf("--------------------------------
");
printf("+ 学生信息管理系统 |
");
printf("--------------------------------
");
printf("+ [1]----录入学生信息 |
");
printf("+ [2]----浏览学生信息 |
");
printf("+ [3]----查询学生信息 |
");
printf("+ [4]----删除学生信息 |
");
printf("+ [5]----修改学生信息 |
");
printf("+ [0]----退出系统 |
");
printf("+*·*·*·*·*·*·*·*·*·*·|
");
printf("--------------------------------
");
printf("请输入您的选择:");
scanf("%d", &choice);
switch(choice)
{
case 0:
writeData();
freeAll();
exit(0);
case 1:
record();
break;
case 2:
displayAll();
break;
case 3:
query();
break;
case 4:
del();
break;
case 5:
change();
break;
default:
printf("
无效选项!");
break;
}
}
while(choice != 0);
}
//录入学生信息
void record()
{
struct student *p0;

p0 = (struct student *)malloc(LEN);
printf("请输入学生的学号:");
scanf("%ld",&p0->num);
printf("请输入学生的姓名:");
scanf("%s",p0->name);
printf("请输入学生的年龄:");
scanf("%d",&p0->age);
printf("请输入学生的性别:");
scanf("%s",p0->sex);
printf("请输入学生的出生年月:");
scanf("%s",p0->birthday);
printf("请输入学生的地址:");
scanf("%s",p0->address);
printf("请输入学生的电话:");
scanf("%ld",&p0->tele_num);
printf("请输入学生的E-mail:");
scanf("%s",p0->E_mail);

insert(p0);
printf("该学生的信息为:
");
printf("-------------------------------------------------------------------------------");
printf("学号姓名年龄性别出生年月地址电话E-mail
");
display(p0);
}

void insert(struct student *stu)
{
struct student *p0, *p1, *p2;

p1 = head;
p0 = stu;

if(head == NULL)
{
head = p0;
p0->next = NULL;
}
else
{
while((p0->num > p1->num)&&(p1->next != NULL))
{
p2 = p1;
p1 = p1->next;
}
if(p0->num num)
{
if(head == p1)
head = p0;
else
p2->next = p0;
p0->next = p1;
}
else
{
p1->next = p0;
p0->next = NULL;
}
}
TOTAL_NUM++;
}

void display(struct student *p)
{
printf("%ld%s%d%s%s%s%ld%s
", p->num, p->name, p->age, p->sex, p->birthday, p->address, p->tele_num, p->E_mail);
}
//浏览学生信息
void displayAll()
{
struct student *p;

printf("学生总数:%d
", TOTAL_NUM);
p = head;
if(head != NULL)
{
printf("
学号姓名年龄性别出生年月地址电话E-mail
");
printf("-------------------------------------------------------------------------------");
do
{
display(p);
p = p->next;
}
while(p != NULL);
}
printf("
");
}
//查询学生信息
void query()
{
int choice;
choice = -1;
do
{
printf("
");
printf("+--------------------+
");
printf("| 按学号查询 请按 1 |
");
printf("| 按姓名查询 请按 2 |
");
printf("| 取消 请按 0 |
");
printf("+--------------------+
");

printf("请输入您的选择:");
scanf("%d", &choice);

switch(choice)
{
case 0:
return;
case 1:
query_by_num();
break;
case 2:
query_by_name();
break;
default:
printf("
无效选项!");
break;
}
}
while(choice != 0);
}
//按学号查询学生信息
void query_by_num()
{
int num;
struct student *p1;

printf("请输入学生的学号:");
scanf("%ld", &num);
if(head==NULL)
{
printf("无学生记录!
");
return;
}
p1=head;
while(num!=p1->num && p1->next!=NULL)
p1=p1->next;
if(num == p1->num)
{
printf("
学号姓名年龄性别出生年月地址电话E-mail
");
printf("-------------------------------------------------------------------------------");
display(p1);
}
else
printf("没有该学生记录,请核对!");
}
//按姓名查询学生信息
void query_by_name()
{
char name[20];
struct student *p1;

printf("请输入学生的姓名:");
scanf("%s", name);
if(head==NULL)
{
printf("无学生记录!
");
return;
}
p1=head;
while(strcmp(name, p1->name) && p1->next!=NULL)
p1=p1->next;
if(!strcmp(name, p1->name))
{

printf("
学号姓名年龄性别出生年月地址电话E-mail
");
printf("-------------------------------------------------------------------------------");
display(p1);
}
else
printf("没有该学生记录,请核对!");
}
//写入文件
void writeData()
{
FILE* fp;//文件指针
struct student *p;

fp = fopen(FILE_DATA_PATH, "w");
if (!fp)
{
printf("文件打开错误!");
return;
}

fprintf(fp,"%d
", TOTAL_NUM);
for(p = head; p!= NULL; p= p->next)
{
fprintf(fp,"%ld%s%d%s%s%s%ld%s
",
p->num, p->name, p->age, p->sex, p->birthday, p->address, p->tele_num, p->E_mail);
}
fclose(fp);
}

void freeAll()
{
struct student *p1, *p2;

p1=p2=head;
while(p1)
{
p2=p1->next;
free(p1);
p1=p2;
}
}
//读取文件
void readData()
{
FILE* fp;//文件指针
struct student *p1, *p2;

fp = fopen(FILE_DATA_PATH, "r");
if (!fp)
{
printf("文件打开错误!");
return 0;
}

fscanf(fp,"%d
", &TOTAL_NUM);
head = p1 = p2 = (struct student *)malloc(LEN);
fscanf(fp,"%ld%s%d%s%s%s%ld%s
",
&p1->num, p1->name, &p1->age, p1->sex, p1->birthday, p1->address, &p1->tele_num, p1->E_mail);
while(!feof(fp))
{
p1 = (struct student *)malloc(LEN);
fscanf(fp,"%ld%s%d%s%s%s%ld%s
",
&p1->num, p1->name, &p1->age, p1->sex, p1->birthday, p1->address, &p1->tele_num, p1->E_mail);
p2->next = p1;
p2 = p1;
}
p2->next = NULL;
fclose(fp);
}
//删除学生信息
void del()
{
struct student *p1, *p2;
long int num;

if(head == NULL)
{
printf("无学生记录!
");
return;
}

printf("请输入您要删除的学生的学号:");
scanf("%ld", &num);

p1 = head;

while(num != p1->num && p1->next != NULL)
{
p2 = p1;
p1 = p1->next;
}
if(num == p1->num)
{
if(p1 == head)
head = p1->next;
else p2->next = p1->next;
free(p1);
TOTAL_NUM--;
}
else
printf("没有该学生记录,请核对!
");
}
//修改学生信息
void change()
{
struct student *p1, *p2;
long int num;

if(head == NULL)
{
printf("无学生记录!
");
return;
}

printf("请输入您要修改的学生的学号:");
scanf("%ld", &num);

p1 = head;

while(num != p1->num && p1->next != NULL)
{
p2 = p1;
p1 = p1->next;
}
if(num == p1->num)
devise(p1);
else
printf("没有该学生记录,请核对!
");

}

void devise(struct student *p)
{
int choice;
choice = -1;
do
{
printf("请选择您要修改的学生的信息内容:
");
printf("+----------------------+
");
printf("| 姓名 请按 1 |
");
printf("| 年龄 请按 2 |
");
printf("| 性别 请按 3 |
");
printf("| 出生年月 请按 4 |
");
printf("| 地址 请按 5 |
");
printf("| 电话 请按 6 |
");
printf("| E-mail 请按 7 |
");
printf("| 取消 请按 0 |
");
printf("+----------------------+
");

printf("请输入您的选择:");
scanf("%d", &choice);

switch(choice)
{
case 0:
return;
case 1:
printf("请输入新姓名:");
scanf("%s", p->name);
break;
case 2:
printf("请输入新年龄:");
scanf("%d", &p->age);
break;
case 3:
printf("请输入新性别:");
scanf("%s", p->sex);
break;
case 4:
printf("请输入新出生年月:");
scanf("%s", p->birthday);
break;
case 5:
printf("请输入新地址:");
scanf("%s", p->address);
break;
case 6:
printf("请输入新电话:");
scanf("%ld", &p->tele_num);
break;
case 7:
printf("请输入新E-mail:");
scanf("%s", p->E_mail);
break;
default:
printf("
无效选项!");
break;
}
}
while(choice != 0);
}

不要把老师布置的任务都拿到网上来让人直接给你写答案!
用动态链表很轻松就实现了,还没我们做的C课程设计难