鱼C论坛

 找回密码
 立即注册
查看: 1685|回复: 4

求解答。课程设计"社团活动信息管理系统",如何按活动时间排序?

[复制链接]
发表于 2016-2-23 22:17:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Chelseaona丶 于 2016-2-24 22:51 编辑

求解答。

课程设计作业 "社团活动信息管理系统",如何按活动时间排序?

求解答。。告诉我哪里出问题了
谢谢谢谢


代码如下:

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

struct activities      //定义社团活动结构体类型
{   
  char name[80];     //社团名称
  char event[80];    //活动名称
  char date[80];     //活动时间
  char spot[80];     //活动地点
  char content[80];  //活动内容
  struct activities * next;  //链表的指针域
};

struct activities * Create_act_Doc();                  //新建链表
void input_a_record(struct activities * head);         //添加记录
void Display_a_record(struct activities * head);       //显示记录
void Delete_a_record(struct activities * head , int n);//删除记录
void find_a_record(struct activities * head);          //查询记录
void Correct_a_record(struct activities * head);       //修改记录
void save(struct activities * head);                   //保存数据至文件


struct activities *Create_act_Doc()   //新建链表头节点
{
struct activities * head;
head=(struct activities *)malloc(sizeof(struct activities)); /*分配头节点空间*/
head->next=NULL;  /*头节点指针域初始化,定为空*/
return head;
}


void save(struct activities * head)   /*保存数据至文件*/
{
     struct activities *p;
     FILE *fp;
     p=head;
     fp=fopen("activities.txt","w+");

         fprintf(fp,"┏━━━━━━┳━━━━━━━┳━━━━━━┳━━━━━━━┳━━━━━━━┓\n"); /*向文件输出表格*/
     fprintf(fp,"┃  社团名称       活动名称       活动时间       活动地点        活动内容   ┃\n");
     fprintf(fp,"┗━━━━━━┻━━━━━━━┻━━━━━━┻━━━━━━━┻━━━━━━━┛\n");
      
     /*指针从头节点开始移动,遍历至尾结点,依次输出活动信息*/
     
     while(p->next!= NULL)
     {
        p=p->next;
        fprintf(fp,"  %-16s%-15s%-15s%-15s%-15s\n\n",p->name,p->event,p->date,p->spot,p->content);
     }
        
         fclose(fp);
     printf("                   已将活动数据保存到 activities.txt 文件\n");
}



void input_a_record(struct activities *head)  /*添加记录*/
{
   struct activities *s, *p;
   char flag='Y';
   p=head;

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

   while(flag=='Y'||flag=='y')
   {
      s=(struct activities *)malloc(sizeof(struct activities));
      
          printf("\n\t                   ◆输入活动记录◆\n\n");
          printf("           -----------------------------------------------\n");
          printf("\n\t                     ◆温馨提示◆\n");
          printf("             活动时间如 2016年1月1日,请输入 2016.01.01\n");      
          
          printf("\n                    请输入社团名称:");
      fflush(stdin);
      scanf("%s",s->name);
      printf("\n                    请输入活动名称:");
      fflush(stdin);
      scanf("%s",s->event);
      printf("\n                    请输入活动时间:");
      fflush(stdin);
      scanf("%s",s->date);
      printf("\n                    请输入活动地点:");
      fflush(stdin);
      scanf("%s",s->spot);
      printf("\n                    请输入活动内容:");
      fflush(stdin);
      scanf("%s",s->content);
      
      p->next=s;  
            p=s;  
      s->next=NULL;
      
      printf("\n                   ━━━━ 添加成功!━━━━\n");
      printf("\n             需要添加更多活动信息吗?(回答Y or N)");
      fflush(stdin);
      scanf("%c",&flag);
      printf("\n");
      if(flag=='N'||flag=='n')
      {
          break;
      }
      else if(flag=='Y'||flag=='y')
      {
          continue;
      }
   }
   save(head);  /*保存数据至文件*/
   return;
}



void Display_a_record(struct activities * head)
{
   struct activities * p;
   int i,j,count;
   char t;

   if(head==NULL || head->next==NULL)  /*判断数据库是否为空*/
   {
    printf("\n                      ━━━━  没有活动记录!  ━━━━\n\n");
    return;
   }
   p=head;
   printf("\n\t                            ◆显示活动记录◆\n\n");
   printf("┏━━━━━━┳━━━━━━━┳━━━━━━┳━━━━━━━┳━━━━━━━┓\n");
   printf("┃  社团名称       活动名称      活动时间      活动地点        活动内容   ┃\n");
   printf("┗━━━━━━┻━━━━━━━┻━━━━━━┻━━━━━━━┻━━━━━━━┛\n");
   
   while(p->next!= NULL)
   {
       p=p->next;
           count++;
   }
   for(i=0;i<count-1;i++)   //用冒泡选择法将活动记录按时间先后排序
          for(j=0;j<count-1;j++)
          {
         if(strcmp(p[j].date,p[j+1].date)>0)
                 {
                     strcpy(t,p[j].date);
                     strcpy(p[j].date,p[j+1].date);
                     strcpy(p[j+1].date,t);

                         strcpy(t,p[j].name);
                     strcpy(p[j].name,p[j+1].name);
                     strcpy(p[j+1].name,t);

                         strcpy(t,p[j].event);
                     strcpy(p[j].event,p[j+1].event);
                     strcpy(p[j+1].event,t);
                 
                         strcpy(t,p[j].content);
                     strcpy(p[j].content,p[j+1].content);
                     strcpy(p[j+1].content,t);

                         strcpy(t,p[j].spot);
                     strcpy(p[j].spot,p[j+1].spot);
                     strcpy(p[j+1].spot,t);
                 }
          }
   /*指针从头节点开始移动,遍历至尾结点,依次输出活动信息*/
   while(p->next!= NULL)
   {
    p=p->next;
    printf(" %-16s%-15s%-15s%-13s%-15s\n\n",p->name,p->event,p->date,p->spot,p->content); /*循环输出表格*/
   }
   printf("\n");
  }

void find_a_record(struct activities *head) /*查找记录*/
{
   struct activities * p;
   char temp[20];
   p=head;
   if(head==NULL || head->next==NULL) /*判断数据库是否为空*/
   {
    printf("                      ━━━━ 并无任何社团活动!━━━━\n");
   }
   else
   {
    printf("请输入您要查找的活动时间: ");
    fflush(stdin);
    scanf("%s",temp);
   
    /*指针从头节点开始移动,遍历至尾结点,查找活动信息*/
    while(p->next!= NULL)
    {
      p=p->next;
      if(strcmp(p->date,temp)==0)
      {
          printf("\n\t                   ◆查询活动记录◆\n\n");
      printf("\nLoading......\n");
      printf("\n");
      printf("┏━━━━━━┳━━━━━━━┳━━━━━━┳━━━━━━━┳━━━━━━━┓\n");
      printf("┃  社团名称       活动名称      活动时间      活动地点        活动内容   ┃\n");
      printf("┗━━━━━━┻━━━━━━━┻━━━━━━┻━━━━━━━┻━━━━━━━┛\n");
      printf("%-15s%-15s%-15s%-15s%-15s\n\n\n",p->date,p->event,p->name,p->spot,p->content);
      }
      if(p->next==NULL)
      {
      printf("\n                   查无此记录!!\n");
      }
    }
}
return;
}

void Correct_a_record(struct activities * head) /*按活动时间查找并修改一条活动记录*/
{
    struct activities * p;
    int judge=0; /*此变量用于判断是否找到书目*/
    char temp[20];
    int choice=0;
    p=head;

    printf("\n\t                   ◆修改活动记录◆\n\n");
    printf("\n               请输入要修改的活动记录的时间:");
    scanf("%s",temp);
    while(p->next!= NULL)
    {
        p=p->next;
        if(strcmp(p->date,temp)==0)
        {
                do{
                printf("\n       社团名称-1 活动名称-2 活动时间-3 活动地点-4 活动内容-5\n\n");
                printf("                  请输入需要修改内容的编号:");
            
                scanf("%d",&choice);
                }while(choice<0 || choice>6);
                       
                printf("\n\n");

                switch(choice){        /*根据输入编号修改相关内容*/
                case 1:
                       printf("                   请输入修改后的社团名称:");
                       fflush(stdin);
                       scanf("%s",p->name);
                       break;

                case 2:
                       printf("                   请输入修改后的活动名称:");
                       fflush(stdin);
                       scanf("%s",p->event);
                       break;

                case 3:
                       printf("                   请输入修改后的活动时间:");
                       fflush(stdin);
                       scanf("%s",p->date);
                       break;

                case 4:
                       printf("                   请输入修改后的活动地点:");
                       fflush(stdin);
                       scanf("%s",p->spot);
                       break;

                case 5:
                       printf("                   请输入修改后的活动内容:");
                       fflush(stdin);
                       scanf("%s",p->content);
                       break;
         
                default:printf("请输入正确的编号!\n");
                        }
       
             printf("\n");
             printf("                      ━━━━  记录修改成功  ━━━━\n");//返回成功信息
             printf("\n");
   
                 judge=1;
  
        }
    }
       
        if(judge==0)
        {
            printf("\n                      ━━━━  查无此活动记录  ━━━━\n\n");
        }
     return;
}


void Delete_a_record(struct activities * head)    /*根据活动时间查找活动并删除活动记录*/
{
   struct activities * s,* p;   
   char temp[20];
   int judge;                                     /*此变量用于判断是否找到了活动记录*/
   judge=0;
   p=s=head;
   
   printf("\n\t                   ◆删除活动记录◆\n\n");
   printf("                 请输入您要删除的活动记录的时间:");
   scanf("%s",temp);

   /*遍历到尾结点*/
   while(p!= NULL)
  {
      if(strcmp(p->date,temp)==0)
    {
      judge++;
      break;
    }
     p=p->next;
  }
   if(judge==1)
  {
     for(;s->next!=p;)    /*找到所需删除卡号结点的上一个结点*/
    {
       s=s->next;
    }
     s->next=p->next; /*将后一节点地址赋值给前一节点的指针域*/
     free(p);
     printf("\n                      ━━━━  删除成功!  ━━━━\n");
  }
  
   else /*未找到相应书目*/
  {
     printf("                     查无此活动记录,请确认后输入!\n");
  }
  return;
}

int main(void)
{
   struct activities * head;
   char choice;
   head=NULL;

   for(;;)
   {
      system("cls");     //运行前清屏
      system("color 3F");
      printf("              ╔============================================╗\n");
      printf("              ┃        ╔────────────╗        ┃\n");
      printf("              ┃        │        欢迎使用        │        ┃\n");
      printf("              ┃        │  社团活动信息管理系统  │        ┃\n");
      printf("              ┃        ╚────────────╝        ┃\n");
      printf("              ┃                                            ┃\n");
      printf("              ┃        1.添加记录        2.浏览记录        ┃\n");
      printf("              ┃                                            ┃\n");
      printf("              ┃        3.查询记录        4.修改记录        ┃\n");
      printf("              ┃                                            ┃\n");
      printf("              ┃        5.删除记录        6.退出系统        ┃\n");
      printf("              ┃                                            ┃\n");
      printf("              ┃                                            ┃\n");
      printf("              ╚============================================╝\n");
      printf("                              请选择【1-6】:                 \n");
      fflush(stdin);
      scanf("%c",&choice);
   

   if(choice=='1')
  {
     if(head==NULL)
    {
        head=Create_act_Doc();
    }
     input_a_record(head);
  }
  
   else if(choice=='2')
  {
   Display_a_record(head);
   system("pause");
  }
  
   else if(choice=='3')
  {
   find_a_record(head);
   system("pause");
  }
  
   else if(choice=='4')
  {
   Correct_a_record(head);
   system("pause");
  }
  
   else if(choice=='5')
  {
   Delete_a_record(head);
   system("pause");
  }
  
   else if(choice=='6')
  {
   printf("\n");
   printf("           ━━━━━━━━ 感谢使用社团活动信息管理系统! ━━━━━━━━\n");
   system("pause");
   exit(0);
  }
  
   else
  {
   printf("                      ━━━━ 输入错误,请重新输入!━━━━");
   system("pause");
  }
   }
   return 0;
}
QQ图片20160224224629.png
4908.png

社团活动信息管理系统.txt

11.36 KB, 下载次数: 7

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-2-24 17:06:58 | 显示全部楼层
你的判断输入的1-6的语句 放到了for循环的外面  所以 你这个只是无限的死循环。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2016-2-24 22:37:35 | 显示全部楼层
gascd 发表于 2016-2-24 17:06
你的判断输入的1-6的语句 放到了for循环的外面  所以 你这个只是无限的死循环。

谢谢回复 运行成功了。我还想问个问题,如何实现对活动时间的排序?是结构体指针排序吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-25 20:56:43 | 显示全部楼层
Chelseaona丶 发表于 2016-2-24 22:37
谢谢回复 运行成功了。我还想问个问题,如何实现对活动时间的排序?是结构体指针排序吗?

十分抱歉  我也没试过  你可以自己去尝试。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-2-26 21:43:57 | 显示全部楼层
gascd 发表于 2016-2-25 20:56
十分抱歉  我也没试过  你可以自己去尝试。

好的,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 20:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表