Chelseaona丶 发表于 2016-2-23 22:17:16

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

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

求解答。{:10_254:}

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

求解答。。告诉我哪里出问题了{:10_254:}
谢谢谢谢{:10_281:}


代码如下:

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

struct activities      //定义社团活动结构体类型
{   
char name;   //社团名称
char event;    //活动名称
char date;   //活动时间
char spot;   //活动地点
char content;//活动内容
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.date,p.date)>0)
               {
                     strcpy(t,p.date);
                     strcpy(p.date,p.date);
                     strcpy(p.date,t);

                       strcpy(t,p.name);
                     strcpy(p.name,p.name);
                     strcpy(p.name,t);

                       strcpy(t,p.event);
                     strcpy(p.event,p.event);
                     strcpy(p.event,t);
               
                       strcpy(t,p.content);
                     strcpy(p.content,p.content);
                     strcpy(p.content,t);

                       strcpy(t,p.spot);
                     strcpy(p.spot,p.spot);
                     strcpy(p.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;
   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;
    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;
   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;
}

gascd 发表于 2016-2-24 17:06:58

你的判断输入的1-6的语句 放到了for循环的外面所以 你这个只是无限的死循环。

Chelseaona丶 发表于 2016-2-24 22:37:35

gascd 发表于 2016-2-24 17:06
你的判断输入的1-6的语句 放到了for循环的外面所以 你这个只是无限的死循环。

谢谢回复{:10_254:} 运行成功了。我还想问个问题,如何实现对活动时间的排序?是结构体指针排序吗?

gascd 发表于 2016-2-25 20:56:43

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

十分抱歉我也没试过你可以自己去尝试。

Chelseaona丶 发表于 2016-2-26 21:43:57

gascd 发表于 2016-2-25 20:56
十分抱歉我也没试过你可以自己去尝试。

好的,谢谢{:10_254:}
页: [1]
查看完整版本: 求解答。课程设计"社团活动信息管理系统",如何按活动时间排序?