您的位置:首页 > 理论基础 > 数据结构算法

数据结构课程设计--协会信息管理系统管理

2016-12-30 14:50 691 查看
/*

*Copyright (c) 2016,烟台大学计算机学院

*All right reserved.

*文件名称:test.cpp

*作者:杨天瑞

*完成日期:2016年12月30日

*版本号:v1.8.9

*

* 问题描述:数据结构课程设计项目,完成一个有关信息统计的系统,包含插入删除,查找,修改等算法。

* 程序输入:成员信息。

* 程序输出:插入删除,查找,修改的结果以及成员信息显示。

*/

xinxi.h:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef struct student
{
int age;
int times;
char name[10];
struct student *next;
}st1;

void creat(st1 *head);//创建链表
void print(st1* head);//打印链表
st1* find(st1 *head,int index);//链表查找
st1* insert(st1 *head);//插入信息
void interface ();//主菜单
void dele(st1 *head);//删除信息
void change(st1 *head);//修改信息
void reverse(st1 *head);//反序输入信息
void sort(st1* head);//链表排序(用值交换的方式)


xinxi.cpp:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"xinxi.h"
void interface ()
{

int i;

printf("\n");
for(i=0;i<20;i++)
printf("====");
printf("\n");
printf("                               * 协会成员信息管理系统 *\n");
printf("\n");
printf("                                 请选择你的操作\n");
for(i=0;i<20;i++)
printf("====");
printf("\n");
printf("\n");
for(i=0;i<3;i++)
printf("       ");
for(i=0;i<7;i++)
printf("*****");
printf("\n");
printf("                     *         1. 初始化系统信息       * \n");
printf("                     *         2. 插入成员信息         * \n");
printf("                     *         3. 删除成员信息         * \n");
printf("                     *         4. 修改成员信息         * \n");
printf("                     *         5. 查找成员信息         * \n");
printf("                     *         6. 显示所有成员信息     * \n");
printf("                     *         7. 逆序显示成员信息     * \n");
printf("                     *         0. 退出系统             * \n");

for(i=0;i<3;i++)
printf("       ");
for(i=0;i<7;i++)
printf("*****");
printf("\n");
printf("\n");
for(i=0;i<20;i++)
printf("====");
printf("\n");
printf("请输入以上序号(0-7):");
}

void creat(st1* head)
{
int i;
int n;
st1 *p,*q;

printf("输入成员人数:");
scanf("%d",&n);

for(i=0;i<n;i++)
{
printf("输入第%d个成员信息:\n",i+1);

p = (st1*)malloc(sizeof(st1));

printf("输入姓名:");
scanf("%s",&p->name);

printf("输入年龄:");
scanf("%d",&p->age);

printf("参加活动次数:");
scanf("%d",&p->times);

printf("输入第%d个成员信息完成",i+1);
printf("\n\n");

if(0 == i)
{
head->next = p;
}
else
{
q->next = p;
}

q = p;
}

p->next = NULL;
}

void print(st1* head)
{

st1* x;
x = head->next ;

printf("成员信息如下:\n");

while(x)
{
printf("姓名:%s    年龄:%d      参加活动次数:%d\n",x->name,x->age,x->times);
x = x->next ;
}
printf("\n");
}

st1* find(st1 *head,int idex)
{
st1 *p;
int i=1;

p = head->next ;

while(p )
{
p = head->next ;
int n = 0;
while(p != NULL)
{
p = p->next;
n++;
}
if(idex>n)
{
printf("输超了,有意思吗??");
}
else{
if(i<idex)
{
p = p->next ;
i++;
}

else
return p;
}}

return p;
}

st1* insert(st1* head)
{
st1 *newst,*p;
int i = 1;
int index;

printf("要插入的位置:");
scanf("%d",&index);//所要插入第几位成员信息
int n = 0;
p=head->next;
while(p != NULL)
{
p = p->next;
n++;
}
if(index>n)
{
printf("输超了,有意思吗??");
}
else{
p = head->next ;
newst = (st1*)malloc(sizeof(st1));

printf("输入姓名:");
scanf("%s",&newst->name);

printf("输入年龄:");
scanf("%d",&newst->age);

printf("输入参加活动次数:");
scanf("%d",&newst->times);

printf("输入成员信息完成\n\n");

if(1 == index)
{
st1 *q = head->next ;
head->next = newst;
newst->next = q;
}
else
while( p )
{
if(i == (index-1))
{
st1 *q = p->next ;

p->next = newst;
newst->next = q;

}

p = p->next ;
i++;

}}
return p;
}

void dele(st1* head)
{
st1 *p,*q;
int i =1 ;
int index;

printf("输入删除第几位成员信息:");
scanf("%d",&index);//所要删除第几位成员信息

p = head->next ;
int n = 0;
while(p != NULL)
{
p = p->next;
n++;
}
if(index>n)
{
printf("输超了,有意思吗??");
}
else
{
if(1 == index)
{

p = head->next ;
head->next  = p->next;

free(p);
p = NULL;

}
else
while(p)
{
if(i ==(index-1))
{
q = p->next ;
p->next = q->next ;

free(q);
}

p = p->next ;
i++;

}
}
printf("第%d位成员信息已经删除\n",index);
}

void change(st1 *head)
{
st1 *p = NULL;
int a ;

printf("输入修改第几位成员信息:\n");
scanf("%d",&a);
p = head->next ;
int n = 0;
while(p != NULL)
{
p = p->next;
n++;
}
if(a>n)
{
printf("输超了,有意思吗??");
}
else
{
p =find(head ,a);//修改之前调用find函数找到该成员信息

printf("输入姓名:");
scanf("%s",&p->name);

printf("输入年龄:");
scanf("%d",&p->age);

printf("输入参加活动次数:");
scanf("%d",&p->times);
}
printf("输入学生信息完成\n");

}

void reverse(st1 *head)
{
st1 *p = head->next,*q;

head->next = NULL;

while(p != NULL)
{
q = p->next;
p->next = head->next;
head->next = p;
p = q;
}

print(head);//打印学生信息

}

void sort(st1 *head)
{
st1 *p,*q;
int m ;

int temp;//交换times临时变量
int temp1;//交换age临时变量
char temp2[10];//交换name临时变量

printf("选择  1.按参加活动次数   2.按年龄排序\n");
scanf("%d",&m);

switch(m)
{
case 1:
for(p = head;p != NULL; p = p-> next)
{
for (q = p->next;q != NULL; q = q-> next )
{
if(p->times>q->times)
{
temp = q->times;
q->times = p->times;
p->times =temp;

temp1 = q->age;
q->age = p->age;
p->age =temp1;

strcpy(temp2,q->name);
strcpy(q->name,p->name);
strcpy(p->name,temp2);

}
}
}
break;
case 2:
for(p = head;p != NULL; p = p-> next)
{
for (q = p->next;q != NULL; q = q-> next )
{
if(p->age>q->age)
{
temp = q->times;
q->times = p->times;
p->times =temp;

temp1 = q->age;
q->age = p->age;
p->age =temp1;

strcpy(temp2,q->name);
strcpy(q->name,p->name);
strcpy(p->name,temp2);

}
}
}
break;
}
}


main.cpp:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"xinxi.h"

int main()
{
int k;
int number;//用于选择程序号;
int i;
int index;//用于选择
int exit=1;
int choose;//用于判断
st1 *head=NULL,*p;
head = (st1*)malloc(sizeof(st1));//分配头指针空间
do
{
system("cls");
interface();
scanf("%d",&number);
system("cls");
if(number==0)//退出系统
{
for(k=1;k>0;k--)
{  system("cls");//清屏函数
printf("                           正在退出系统,请稍等");
for(i=0;i<89999999;i++)
{};
printf("....");
for(i=0;i<89999999;i++)
{};
}

printf("\n\n");
printf("是否退出系统(1/0):");
scanf("%d",&choose);
if(choose==1)
{	 system("cls");
exit=0;
for(i=0;i<3;i++)
printf("       ");
printf("\n\n\n\n");
for(i=0;i<89999999;i++)
{};
printf("                         欢迎下次使用成员信息管理系统!!!!\n\n\n");
}

}

switch(number)//选择7以内的数字 进行操作 system("cls");
{

case 1://创建链表
printf("\n");
for(i=0;i<20;i++)
printf("====");
printf("\n                          * 初始化系统信息 *\n\n");
for(i=0;i<20;i++)
printf("====");
printf("\n");
creat(head);
printf("\n初始化信息完毕!,请输入1返回主菜单:");
scanf("%d",&choose);
while(choose!=1)
{
printf("请输入1返回主菜单:");
scanf("%d",&choose);
}
break;

case 2://插入成员信息
printf("\n");
for(i=0;i<20;i++)
printf("====");
printf("\n                          * 插入成员信息 *\n\n");
for(i=0;i<20;i++)
printf("====");
printf("\n");
insert(head);
printf("\n插入成员信息完毕!,请输入1返回主菜单:");
scanf("%d",&choose);
while(choose!=1)
{
printf("请输入1返回主菜单:");
scanf("%d",&choose);
}
break;

case 3://删除成员信息
printf("\n");
for(i=0;i<20;i++)
printf("====");
printf("\n                           * 删除成员信息 *\n\n");
for(i=0;i<20;i++)
printf("====");
printf("\n");
dele(head);
printf("\n删除信息完毕,请输入1返回主菜单:");
scanf("%d",&choose);
while(choose!=1)
{
printf("请输入1返回主菜单:");
scanf("%d",&choose);
}
break;

case 4://修改信息
printf("\n");
for(i=0;i<20;i++)
printf("====");
printf("\n                           * 修改成员信息 *\n\n");
for(i=0;i<20;i++)
printf("====");
printf("\n");
change(head);
printf("\n修改信息完毕!,请输入1返回主菜单:");
scanf("%d",&choose);
while(choose!=1)
{
printf("请输入1返回主菜单:");
scanf("%d",&choose);
}
break;

case 5://查找成员信息
printf("\n");
for(i=0;i<20;i++)
printf("====");
printf("\n                           * 查找成员信息 *\n\n");
for(i=0;i<20;i++)
printf("====");
printf("\n");
printf("输入你要查找第几位成员:");
scanf("%d",&index);
p = find(head,index);//查找成员信息并返回 地址
printf("姓名:%s   年龄:%d    参加活动次数:%d\n",p->name,p->age,p->times);
printf("\n查找信息完毕!,请输入1返回主菜单:");
scanf("%d",&choose);
while(choose!=1)
{
printf("请输入1返回主菜单:");
scanf("%d",&choose);
}
break;

case 6:  //排序
printf("\n");
for(i=0;i<20;i++)
printf("====");
printf("\n                         * 显示所有成员信息 *\n\n");
for(i=0;i<20;i++)
printf("====");
printf("\n");
sort(head);

print(head);//打印排序后的成员信息
printf("\n信息输出完毕!,请输入1返回主菜单:");
scanf("%d",&choose);
while(choose!=1)
{
printf("请输入1返回主菜单:");
scanf("%d",&choose);
}
break;

case 7://链表反转
printf("\n");
for(i=0;i<20;i++)
printf("====");
printf("\n                         * 逆序显示成员信息 *\n\n");
for(i=0;i<20;i++)
printf("====");
printf("\n");
reverse(head);
printf("\n信息输出完毕!,请输入1返回主菜单:");
scanf("%d",&choose);
while(choose!=1)
{
printf("请输入1返回主菜单:");
scanf("%d",&choose);
}
break;

default :
break;

}

}while(1&&exit);
return 0;
}


程序运行截图:







内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构 应用