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

/* 


*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;
}



程序运行截图:


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值