C语言课程设计——NBA球员管理系统

       第一次写这么长的C语言代码,每天写5~6个小时,这三天时间着实感觉不易,但也算把一年学到的内容都运用了一遍,还是感觉不错的!!当然,中间出了很多问题,但幸运的是都顺利解决了,感谢 小胡,小巩同学对我的帮助。下面贴上源码(写的一般,希望能得到评价与建议^o^):

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<windows.h>
void Colorsetting();
void menu();
void sign();
void process();
void sys_menu();
void choose();
typedef struct nba
{
	char name[20]; //球员姓名
	int num;//球衣号码
	char team[20];//所在球队
	float score;//得分
	float block;//篮板
	float assist;//助攻
	struct nba *next;//指向下一个节点
}nba;
typedef struct NAME
{
	char name[50];
	char pwd[50];
}Name;
nba *savei(nba *head)
{
	FILE *fp;
	nba *p;
	char filmname[40];
	printf("\t完成所有操作后便可存入文件中!\n");
	printf("\n\t输入要保存的文件名:  ");
	scanf("%s", filmname);
	if ((fp = fopen(filmname, "a+")) == NULL)
	{
		printf("\t写文件出错,按任意键退出!");
		getch();
		exit(1);
	}
	for (p = head->next; p != NULL; p = p->next)
	{
		fprintf(fp, "%s %d %s %.1f %.1f %.1f\n", p->name, p->num, p->team, p->score, p->block, p->assist);
	}
	fclose(fp);
	printf("\n\t文件已经保存成功!");
	getch();
	return head;
}
int pd(Name signin)
{
	FILE *fp1;
	Name member;
	int flag = 2;
	fp1 = fopen("name.txt", "rt");
	if (fp1 == NULL)
	{
		printf("\t输入无效,按任意键返回注册!\n");
		getch();
		exit(1);
	}
	while (fscanf(fp1, "%s", member.name) != EOF)
	{
		if (strcmp(signin.name, member.name) == 0)
		{
			flag = 0;
			break;
		}
		else if (strcmp(signin.name, member.name) != 0)
		{
			flag = 1;
			continue;
		}
	}
	if (flag == 0)
	{
		return 0;
	}
	else if (flag == 1)
	{
		return 1;
	}
	else if (flag == 2)
	{
		return 1;
	}
}
void sign()
{
	Name signin;
	FILE  *fp1;
	fp1 = fopen("name.txt", "a+");
	if (fp1 == NULL)
	{
		printf("打开失败,按任意键退出!\n");
		exit(1);
	}
	printf("\t请输入用户名:");
	getchar();
	gets(signin.name);
	printf("\n");
	if (pd(signin) == 0)
	{
		printf("\t对不起,您注册的用户名重复,返回重新想一个名字吧");
		getch();
		menu();
	}
	else if (pd(signin) == 1)
	{
		printf("\t请设置密码:");
		gets(signin.pwd);
		fputs(signin.name, fp1);
		fputs(" ", fp1);
		fputs(signin.pwd, fp1);
		fputs("\n", fp1);
		fclose(fp1);
		printf("\t*****注册成功,按任意键返回*****");
		getch();
		menu();
	}
}
void login()
{
	Name log;
	FILE *fp1;
	int i;
	int flag=0;
	char ch[50],p[50];
	fp1 = fopen("name.txt", "rt");
	printf("\t请输入用户名:");
	getchar();
	gets(ch);
	printf("\t请输入密码:");
	for (i = 0;; i++)
	{
		p[i] = getch();
		switch (p[i])
		{
		case '\b':
			p[--i] = '\0';
			i--;
			printf("\b \b");
			break;
		case '\r':
			p[i] = '\0';
			putchar('\n');
			break;
		default:
			putchar('*');
			break;
		}
		if (p[i] == '\0') break;
	}
	while(fscanf(fp1,"%s %s",log.name,log.pwd)!=EOF)
	{	
		if( strcmp(ch,log.name)==0&&strcmp(p,log.pwd)==0 )
		{	
				flag=1;
				break;
        }
			else if(strcmp(ch,log.name)==0&&strcmp(p,log.pwd)!=0)
			{	
				flag=0;
				break;
			}
		else if(strcmp(ch,log.name)!=0)
		{
             flag=2;	
			continue;
		}
	}
		if(flag==1)
		{
			process();
			sys_menu();
		}
		else if(flag ==0)
		{
			printf("\t密码出错!");
			getch();
			menu();
		}
		else if(flag ==2)
		{
			printf("\t您输入用户名不存在!");
			getch();
			menu();
		}
	
}
void process()
{
	system("cls");
	printf("\n\n\n\n\n\n\n");
	printf("\t\t恭喜登陆成功!老司机开车了,即将进入NBA的世界,系好安全带,出发\n");
	Sleep(1100);
	system("cls");
	printf("\n\n\n\n\n\n\n");
	printf("\t\t科比.布莱恩特---==≡≡ ...\n");
	Sleep(400);
	system("cls");
	printf("\n\n\n\n\n\n\n");
	printf("\t\t这球也能进?\n...\n");
	Sleep(400);
	system("cls");
	printf("\n\n\n\n\n\n\n");
	printf("\t\t︿( ̄︶ ̄)︿~ ...\n");
	Sleep(400);
	system("cls");
	printf("\n\n\n\n\n\n\n");
	printf("\t\t这个大火锅结结实实 ...\n");
	Sleep(400);
	system("cls");
	printf("\n\n\n\n\n\n\n");
	printf("\t\t湖人总冠军!)~ !\n");
	Sleep(500);
	system("cls");
	printf("\n\n\n\n\n\n\n");
	printf("\t\t哈登晃到了勒布朗!!!...\n");
	Sleep(400);
	system("cls");
	printf("\n\n\n\n\n\n\n");
	printf("\t\t这球走步了 !\n");
	Sleep(500);
	system("cls");
	printf("\n\n\n\n\n\n\n");
	printf("\t\tThis is why we play ! \n");
	printf("\t\t3...\n");
	Sleep(400);
	system("cls");
	printf("\n\n\n\n\n\n\n");
	printf("\t\t2..\n");
	Sleep(400);
	system("cls");
	printf("\n\n\n\n\n\n\n");
	printf("\t\t1.\n");
	Sleep(400);
	system("cls");

	printf("\n\n\n\n\n\n\n");
	printf("\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
	printf("\t\t~********************************************************************************~\n");
	printf("\t\t~  *      *      *  * * * *  *        * * *    * * *       *     *     * * * *   ~\n");
	printf("\t\t~  *      *      *  *        *       *       *       *    * *   * *    *         ~\n");
	printf("\t\t~   *     *     *   * * * *  *      *       *         *  *   * *   *   * * * *   ~\n");
	printf("\t\t~    *  *   *  *    *        *       *       *       *  *     *     *  *         ~\n");
	printf("\t\t~     *       *     * * * *  * * * *  * * *    * * *    *     *     *  * * * *   ~\n");
	printf("\t\t~********************************************************************************~\n");
	printf("\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
	Sleep(1200);
	printf("\n\n\n\n\n\n\n");
	system("cls");
	sys_menu();
}
nba *input()
{
	nba *p;
	nba *q, *s;
	int x, i = 0;
	system("cls");
	p = (nba *)malloc(sizeof(nba));
	p->next = NULL;
	q = p;

	printf("请输入球员数量: ");
	scanf("%d", &x);
	do
	{
		s = (nba*)malloc(sizeof(nba));
		printf("\t\t***********请输入球员信息***********\n");
		printf("第%d个球员信息:\n", i + 1);
		printf("  球员姓名: ");
		scanf("%s", s->name);
		printf("  号码: ");
		scanf("%d", &s->num);
		printf("  所在球队: ");
		scanf("%s", s->team);
		printf("  生涯场均得分:");
		scanf("%f", &s->score);
		printf("  生涯场均篮板: ");
		scanf("%f", &s->block);
		printf("  生涯场均助攻: ");
		scanf("%f", &s->assist);
		q->next = s;
		q = s;
		s->next = NULL;
		i++;
	} while (i<x);
	printf("\n\t\t恭喜你,录入完毕~~^O^");
	getch();
	return p;
}
nba *print(nba *head)
{
	nba *p = head->next;
	printf("\n\n                              --球员信息--                                            \n\n");
	printf("\t------------------------------------------------------------------------------------------\n");
	printf("\t姓名------------号码-------------球队-----------得分------------篮板-------------助攻-----\n");
	while (p)
	{
		printf("\t%-17s%-16d%-15s%-16.1f%-17.1f%-17.1f\n", p->name, p->num, p->team, p->score, p->block, p->assist);
		p = p->next;
	}
	printf("\n          按任意键返回!");
	getch();
	return head;
}
nba *print2(nba *head)
{
	system("cls");
	nba *p = head->next;
	printf("\n\n --得分榜排名--\n\n");
	printf("\t-------------------\n");
	printf("\t姓名-----------得分\n");
	while (p)
	{
		printf("\t%-17s%-16.1f\n", p->name, p->score);
		p = p->next;
	}
	printf("\n          按任意键返回!");
	getch();
	return head;
}
nba *print3(nba *head)
{
	system("cls");
	nba *p = head->next;
	printf("\n\n --篮板排名--\n\n");
	printf("\t-------------------\n");
	printf("\t姓名-----------篮板\n");
	while (p)
	{
		printf("\t%-17s%-16.1f\n", p->name, p->block);
		p = p->next;
	}
	printf("\n          按任意键返回!");
	getch();
	return head;
}
nba *print4(nba *head)
{
	system("cls");
	nba *p = head->next;
	printf("\n\n --得分榜排名--\n\n");
	printf("\t-------------------\n");
	printf("\t姓名-----------得分\n");
	while (p)
	{
		printf("\t%-17s%-16.1f\n", p->name, p->assist);
		p = p->next;
	}
	printf("\n          按任意键返回!");
	getch();
	return head;
}
nba *del(nba *head)
{
	nba *q;
	nba *p = head;
	q = head->next;
	char id[20];
	printf("\n请输入要删除的球员姓名:");
	scanf("%s", &id);
	while (q)
	{
		if (strcmp(q->name, id) == 0)
		{
			p->next = q->next;
			free(q);
			q = p->next;
		}
		else
		{
			p = p->next;
			q = q->next;
		}
	}
	printf("\n删除完成!!");
	getch();
	return head;
}
nba *search(nba *head)
{
	system("cls");
	nba *p;
	p = head;
	char id[20];
	printf("\n请输入要查询的球星名字: ");
	scanf("%s", &id);
	while (strcmp(p->name, id) != 0 && p)
	{
		p = p->next;
	}
	if (p != NULL)
	{
		printf("\n\n                              --球员信息--                                            \n\n");
		printf("\t------------------------------------------------------------------------------------------\n");
		printf("\t姓名------------号码-------------球队-----------得分------------篮板-------------助攻-----\n");
		printf("\t%-17s%-16d%-15s%-16.1f%-17.1f%-17.1f\n", p->name, p->num, p->team, p->score, p->block, p->assist);
	}
	else
	{
		printf("\n\t未查询到该球员的信息,请检查是否输入正确。");
	}
	printf("\n\t按任意键返回!");
	getch();
	return head;
}
nba *rank1(nba *head)
{
	nba *p, *q, *t;
	t = NULL;
	while (t != head->next)
	{
		p = head;
		q = p->next;
		while (q->next != t)
		{
			if (p->next->score<q->next->score)
			{
				p->next = q->next;
				q->next = q->next->next;
				p->next->next = q;
			}
			p = p->next;
			q = p->next;
		}
		t = q;
	}
	print2(head);
	return(head);
}
nba *rank2(nba *head)
{
	nba *p, *q, *t;
	t = NULL;
	while (t != head->next)
	{
		p = head;
		q = p->next;
		while (q->next != t)
		{
			if (p->next->block<q->next->block)
			{
				p->next = q->next;
				q->next = q->next->next;
				p->next->next = q;
			}
			p = p->next;
			q = p->next;
		}
		t = q;
	}
	print3(head);
	return(head);
}
nba *rank3(nba *head)
{
	nba *p, *q, *t;
	t = NULL;
	while (t != head->next)
	{
		p = head;
		q = p->next;
		while (q->next != t)
		{
			if (p->next->assist<q->next->assist)
			{
				p->next = q->next;
				q->next = q->next->next;
				p->next->next = q;
			}
			p = p->next;
			q = p->next;
		}
		t = q;
	}
	print4(head);
	return(head);
}
nba *change(nba *head)
{
	system("cls");
	nba *p = head;
	int choice;
	char id[20];
	printf("\n\t请输入要修改的球员姓名:\n");
	scanf("%s", &id);
	while (p&&strcmp(p->name, id) != 0)
	{
		p = p->next;
	}
	if (p)
	{
		printf("\n\n                              --球员信息--                                            \n\n");
		printf("\t------------------------------------------------------------------------------------------\n");
		printf("\t姓名------------号码-------------球队-----------得分------------篮板-------------助攻-----\n");
		printf("\t%-17s%-16d%-15s%-16.1f%-17.1f%-17.1f\n", p->name, p->num, p->team, p->score, p->block, p->assist);
		printf("\n\n");
		printf("\t┏━━━━━━━━请选择修改的选项━━━━━━━━┓\n");
		printf("\t┃┄┄┄┄┄┄┄┄┄1.球员名称┄┄┄┄┄┄┄┄┄┄┃\n");
		printf("\t┃┄┄┄┄┄┄┄┄┄2.球员号码┄┄┄┄┄┄┄┄┄┄┃\n");
		printf("\t┃┄┄┄┄┄┄┄┄┄3.球员所在球队┄┄┄┄┄┄┄┄┃\n");
		printf("\t┃┄┄┄┄┄┄┄┄┄4.球员场均得分┄┄┄┄┄┄┄┄┃\n");
		printf("\t┃┄┄┄┄┄┄┄┄┄5.球员场均篮板┄┄┄┄┄┄┄┄┃\n");
		printf("\t┃┄┄┄┄┄┄┄┄┄6.球员场均助攻┄┄┄┄┄┄┄┄┃\n");
		printf("\t┗━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
		printf("\n请选则您要进行的修改项:");
		scanf("%d", &choice);
		switch (choice)
		{
		case 1:printf("\n                   请输入修改后的姓名:");
			scanf("%s", p->name); break;
		case 2:printf("\n                   请输入修改后的号码:");
			scanf("%d", &p->num); break;
		case 3:printf("\n                   请输入修改后的队伍:");
			scanf("%s", p->team); break;
		case 4:printf("\n                   请输入修改后的得分:");
			scanf("%f", &p->score); break;
		case 5:printf("\n                   请输入修改后的篮板:");
			scanf("%f", &p->block); break;
		case 6:printf("\n                   请输入修改后的助攻:");
			scanf("%f", &p->assist); break;
		}
		printf("\n\n恭喜你,修改成功");
		printf("\n\n                              --球员信息--                                            \n\n");
		printf("\t------------------------------------------------------------------------------------------\n");
		printf("\t姓名------------号码-------------球队-----------得分------------篮板-------------助攻-----\n");
		printf("\t%-17s%-16d%-15s%-16.1f%-17.1f%-17.1f\n", p->name, p->num, p->team, p->score, p->block, p->assist);
	}
	printf("\n                        按任意键返回!");
	getch();
	return head;
}
nba *readi()
{
	nba *head, *q, *p;
	FILE *fp;
	char filmname[40];
	printf("\t输入要打开的文件名:   ");
	scanf("%s", filmname);
	if ((fp = fopen(filmname, "rt")) == NULL)
	{
		printf("\t打开文件有错,按任意键退出!");
		getch();
		exit(1);
	}
	head = (nba *)malloc(sizeof(nba));
	head->next = NULL;
	q = head;
	while (!feof(fp)) {
		p = (nba *)malloc(sizeof(nba));
		fscanf(fp, "%s %d %s %f %f %f\n", p->name, &p->num, p->team, &p->score, &p->block, &p->assist);
		q->next = p;
		q = p;
	}
	q->next = NULL;
	printf("\n\t文件已读出,按任意键显示!");
	fclose(fp);
	getch();
	return head;
}

void sys_menu()
{
	nba *head = NULL;
	int choice;
	do
	{
		system("cls");
		printf("\n\n");
		printf("\t┌────────────────────────────────┐\n");
		printf("\t│                欢迎来到NBA球员管理系统!!                     │\n");
		printf("\t│-------------------This is why we play! ----------------------  │\n");
		printf("\t│                    1-  录入球员信息                            │\n");
		printf("\t│                    2-  修改球员信息                            │\n");
		printf("\t│                    3-  删除球员信息                            │\n");
		printf("\t│                    4-  查询球员信息                            │\n");
		printf("\t│                    5-  展示所有球员信息                        │\n");
		printf("\t│                    6-  得分排名                                │\n");
		printf("\t│                    7-  篮板排行                                │\n");
		printf("\t│                    8-  助攻排行                                │\n");
		printf("\t│                    9-  查看已存球员信息                        │\n");
		printf("\t│                    10- 录入完记得保存                          │\n");
		printf("\t│                    0-  退出程序                                │\n");
		printf("\t└────────────────────────────────┘\n");
		printf("\t注意:在未输入任何信息前,只能查看已存信息\n");
		printf("\t欢迎使用NBA球星管理系统,请选择功能0-10:  ");
		scanf("%d", &choice);
		switch (choice)
		{
		case 1:head = input();       break;
		case 2:head = change(head);  break;
		case 3:del(head);          break;
		case 4:search(head);       break;
		case 5:head = print(head);   break;
		case 6:head = rank1(head);   break;
		case 7:head = rank2(head);   break;
		case 8:head = rank3(head);   break;
		case 9:head = readi(); head = print(head);    break;
		case 10:savei(head);        break;

		}
		if (choice == 0)
			menu();
	} while (choice != 0);
}

void menu()
{
	int choice;
	system("cls");
	printf("\n\n");
	printf("\t\t|------------------------------|\n");
	printf("\t\t|--欢迎来到NBA球员管理系统^-^--|\n");
	printf("\t\t|---Basketball Never Stop!-----|\n");
	printf("\t\t|------------------------------|\n");
	printf("\t\t|---------注册-请按1-----------|\n");
	printf("\t\t|---------登陆-请按2-----------|\n");
	printf("\t\t|---------退出-请按0-----------|\n");
	printf("\t\t|------------------------------|\n");
	printf("\t请输入您的选择: ");
	scanf("%d", &choice);
	switch (choice)
	{
	case 0:printf("\t\t您已成功退出!欢迎下次再来!\n"); exit(0);
	case 1:sign(); break;
	case 2:login(); break;
	default:printf("\t\t您输入有误哟~请重新选择^o^ \n"); getch(); menu();
	}

}


main()
{
	nba *head = NULL;
	choose();
	//Colorsetting();
	//menu();
}
void choose()
{
	int x;
	system("cls");
	printf("\n\n");
	printf("\t\t在开始之前你想要焕身帅气的皮肤吗?>_<\n");
	printf("\n");
	printf("\t\t如果想,请输入1进入换肤界面,如果对现在的皮肤满意的话,那就戳0进入开始界面吧!\n");
	printf("\n");
	printf("\t\t请输入您的选择: ");
	scanf("%d", &x);
	switch (x)
	{
	case 1: Colorsetting(); break;
	case 0: menu(); break;
	default: printf("\t\t对不起,您输入有误,请重新开始!"); getch(); choose();
	}
}
void Colorsetting()
{
	int a;
	char choice;
	system("cls");
	printf("\n\n");
	printf("\t┏━━━请选择一下您的背景━━━┓\n");
	printf("\t┣┄┄┄┄1.红底黑字┄┄┄┄┄┄┫\n");
	printf("\t┣┄┄┄┄2.白底黑字┄┄┄┄┄┄┫\n");
	printf("\t┣┄┄┄┄3.黑底红字┄┄┄┄┄┄┫\n");
	printf("\t┣┄┄┄┄4.绿底蓝字┄┄┄┄┄┄┫\n");
	printf("\t┣┄┄┄┄5.黄底紫字┄┄┄┄┄┄┫\n");
	printf("\t┣┄┄┄┄6.系统默认┄┄┄┄┄┄┫\n");
	printf("\t┗━━━━━━━━━━━━━━━┛\n");
	printf("\n\t请输入你喜欢的颜色<1-6>:   ");
	scanf("%d", &a);
	switch (a)
	{
	case 1:
		system("color 40");
		break;
	case 2:
		system("color 70");
		break;
	case 3:
		system("color 04");
		break;
	case 4:
		system("color 21");
		break;
	case 5:
		system("color 65");
		break;
	case 6:
		system("color 1a");
		break;
	default:
		printf("\n\t输入无效,请重新输入\n");
		getch();
		Colorsetting();
	}
	printf("\n\n\t皮肤不行,换换就行,回车继续换\n\t或者<<按y'进入主界面>>\n");
	fflush(stdin);
	printf("\t");
	scanf("%c", &choice);
	if (choice == 'Y' || choice == 'y')
	{
		system("cls");
		menu();
	}
	else
	{
		Colorsetting();
	}
}


评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值