|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
} |
|