#include "sss.h"
int main()
{
gh_std_out = GetStdHandle(STD_OUTPUT_HANDLE); /* 获取标准输出设备句柄*/
gh_std_in = GetStdHandle(STD_INPUT_HANDLE); /* 获取标准输入设备句柄*/
SetConsoleTitle(gp_sys_name); /*设置窗口标题*/
int end = 0, open = 0, c;
open = OpenData(&gp_head);
if(open == 0)
{
gp_head = (MEMBER*)malloc(sizeof(MEMBER));
creatlist(&gp_head);
}
ShowMenu();
while(end == 0)
{
scanf("%d",&c);
switch(c)
{
case 0: end = 1; break;
case 1: Rank(gp_head); break;
case 2: Department_Awarded(gp_head); break;
case 3: Event_Awarded(gp_head); break;
case 4: creatlist(&gp_head); break;
case 5: InsertList(gp_head); break;
case 6: ModifyList(gp_head); break;
case 7: DeleteList(&gp_head); break;
case 8: Myprint(gp_head); break;
default : printf("\t\t输入错误,请正确输入!\n\n\n"); break;
}
SetConsoleCursorPosition(gh_std_out, set_cursor);
}
SaveData(gp_head);
return 0;
}
void ShowMenu(void)
{
int i;
printf(" ----------------------------系部--------------------------------------\n");
for(i=0; i <5; i++)
printf(" %d,%s ",i,D_epartment[i]);
printf(" _____________________________项目______________________________________\n");
for(i=0; i<10; i++)
{
printf(" %d,%s\t",i,E_vent[i]);
if(i%4==0&&i!=0&&i!=8)
printf("\n");
}
printf("\n");
printf(" ------------------------------------------------------------------------\n");
printf("\n ****************请选择操作**********************\n"
" * 0、结束 *\n"
" * 1、按照比赛成绩从高到底输出系部和其比赛成绩*\n"
" * 2、查询指定系部编号的获奖记录 *\n"
" * 3、查询指定运动项目的获奖记录 *\n"
" * 4、新创建获奖名单 *\n"
" * 5、向原获奖名单中插入数据 *\n"
" * 6、修改运动员获奖记录 *\n"
" * 7、删除运动员获奖记录 *\n"
" * 8、打印所有运动员信息 *\n"
" ************************************************\n");
printf("请选择操作(0~5):\n");
return;
}
void creatlist(MEMBER **phead)
{
ClearScreen();
char c;
MEMBER *pme;
pme = (MEMBER *)malloc(sizeof(MEMBER));
*phead = pme;
while(1)
{
printf("\t\t请输入运动员信息\n");
printf("\t\t请输入系部编号(0~4):");
scanf("%d", &(pme ->denum));
while((pme ->denum) > 4 || (pme ->denum) < 0)
{
printf("\t\t输入错误,请重新输入:");
scanf("%d", &(pme ->denum));
}
printf("\t\t请输入项目编号(0~9):");
scanf("%d", &(pme ->evnum));
while((pme ->evnum) > 10 || (pme ->evnum) < 0)
{
printf("\t\t输入错误,请重新输入:");
scanf("%d", &(pme ->evnum));
}
printf("\t\t请输入运动员姓名(例如li):");
scanf("%s", pme ->name);
printf("\t\t请输入其名次(1~5):");
scanf("%d", &(pme ->rank));
while((pme ->rank) > 5 || (pme ->rank) < 1)
{
printf("\t\t输入错误,请重新输入:");
scanf("%d", &(pme ->rank));
}
if(pme ->rank == 1)
pme ->score = 7;
if(pme ->rank == 2)
pme ->score = 5;
if(pme ->rank == 3)
pme ->score = 3;
if(pme ->rank == 4)
pme ->score = 2;
if(pme ->rank == 5)
pme ->score = 1;
printf("\t\t是否继续[Y/N]");
fflush(stdin);
c =getchar();
if(c =='N'|| c == 'n')
{
pme ->next = NULL;
break;
}
pme ->next = (MEMBER *)malloc(sizeof(MEMBER));
pme = pme ->next;
}
ClearScreen();
ShowMenu();
return;
}
void SaveData(MEMBER *phead)
{
FILE *fin;
fin = fopen(member_data, "wb");
while(phead)
{
fwrite(phead, sizeof(MEMBER), 1, fin);
phead = phead ->next;
}
fclose(fin);
return;
}
int OpenData(MEMBER **phead)
{
MEMBER *pme, *p;
FILE *pfile;
if((pfile = fopen(member_data, "rb")) == NULL)
{
printf("尚未初始化运动员信息,请输入…\n");
return 0;
}
printf("运动员信息打开成功…\n");
if(feof(pfile) != 0)
{
printf("信息加载失败……\n");
return 0;
}
else
{
pme = (MEMBER *)malloc(sizeof(MEMBER));
fread(pme, sizeof(MEMBER), 1, pfile);
*phead = pme;
while(!feof(pfile))
{
pme ->next = (MEMBER *)malloc(sizeof(MEMBER));
p = pme;
pme = pme ->next;
fread(pme, sizeof(MEMBER), 1, pfile);
}
p ->next =NULL;
}
fclose(pfile);
return 1;
}
void Department_Awarded(MEMBER *phead)
{
ClearScreen();
ShowMenu();
int DanTeng;
printf("\t\t请输入系部编号(0~4):");
scanf("%d",&DanTeng);
int flag=0;
while(phead != NULL)
{
if(phead ->denum == DanTeng)
{
printf("---------------------------------------\n");
printf("\t\t参赛系部:%s\n",D_epartment[phead ->denum]);
printf("\t\t运动员姓名:%s\n",phead ->name);
printf("\t\t参赛项目:%s\n",E_vent[phead ->evnum]);
printf("\t\t获得名次:%d\n",phead ->rank);
printf("\t\t得分:%d\n",phead ->score);
flag=1;
}
phead=phead->next;
}
if(flag==0)
{
printf("\t\t无该系部的获奖信息!\n\n");
}
return;
}
void ModifyList(MEMBER *phead)
{
ClearScreen();
ShowMenu();
char Name[10], c;
MEMBER *pme;
printf("输入运动员姓名:");
scanf("%s",Name);
pme = Seekmember(phead, Name);
if(pme)
{
printf("---------------------------------------\n");
printf("\t\t运动员姓名:%s\n",pme ->name);
printf("\t\t参赛系部:%s\n",D_epartment[pme ->denum]);
printf("\t\t参赛项目:%s\n",E_vent[pme ->evnum]);
printf("\t\t获得名次:%d\n",pme ->rank);
printf("\t\t得分:%d\n",pme ->score);
printf("是否修改【Y/N】");
fflush(stdin);
c =getchar();
if(c =='N'|| c == 'n')
{
return;
}
printf("\t\t请输入其系部编号(0~4):");
scanf("%d", &(pme ->denum));
while((pme ->denum) > 4 || (pme ->denum) < 0)
{
printf("\t\t输入错误,请重新输入:");
scanf("%d", &(pme ->denum));
}
printf("\t\t项目编号(0~9):");
scanf("%d", &(pme ->evnum));
while((pme ->evnum) > 10 || (pme ->evnum) < 0)
{
printf("\t\t输入错误,请重新输入:");
scanf("%d", &(pme ->evnum));
}
printf("\t\t获得名次(1~5):");
scanf("%d", &(pme ->rank));
while((pme ->rank) > 5 || (pme ->rank) < 1)
{
printf("\t\t输入错误,请重新输入:");
scanf("%d", &(pme ->rank));
}
if(pme ->rank == 1)
pme ->score = 7;
if(pme ->rank == 2)
pme ->score = 5;
if(pme ->rank == 3)
pme ->score = 3;
if(pme ->rank == 4)
pme ->score = 2;
if(pme ->rank == 5)
pme ->score = 1;
printf("修改完成!\n");
}
else
printf("选手信息不存在!\n");
return;
}
MEMBER* Seekmember(MEMBER *phead,char *Name)
{