求解答。课程设计"社团活动信息管理系统",如何按活动时间排序?
本帖最后由 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;
} 你的判断输入的1-6的语句 放到了for循环的外面所以 你这个只是无限的死循环。 gascd 发表于 2016-2-24 17:06
你的判断输入的1-6的语句 放到了for循环的外面所以 你这个只是无限的死循环。
谢谢回复{:10_254:} 运行成功了。我还想问个问题,如何实现对活动时间的排序?是结构体指针排序吗? Chelseaona丶 发表于 2016-2-24 22:37
谢谢回复 运行成功了。我还想问个问题,如何实现对活动时间的排序?是结构体指针排序吗?
十分抱歉我也没试过你可以自己去尝试。 gascd 发表于 2016-2-25 20:56
十分抱歉我也没试过你可以自己去尝试。
好的,谢谢{:10_254:}
页:
[1]