C语言的指针程序系统,大佬救救孩子吧,从功能界面的第二个选项开始,就有点问题了,改了很多次,不知道怎么改了

原来是月月呀 2020-01-05 06:30:58
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


void jm();//学生系统界面
void gn();//学生系统功能界面
void dl();//密码登录界面
struct student *creat(void);//学生信息录入
void xs(struct student* head);//学生信息显示
struct student *add(struct student *head);//添加学生信息
void del(struct student* head);//删除学生信息
struct student *xgxsxx(struct student *head,int xuehao);//修改学生信息

struct student //定义结构体
{
int xuehao;
char name[6] ;
char shuxue[6] ;
char yuwen[6] ;
char english[6] ;
float average ;
struct student *p;
struct student *next;
};

int n;//定义全局变量

int main()
{
jm();
gn();
return 0;
}

void jm () //界面
{
system ("cls") ;
printf ("\n\n\n\n\n\n\t\t\t\t\t 欢迎进入学生系统\n") ;
printf ("\t\t\t\t\t *******************\n") ;
printf ("\t\t\t\t\t 1.登录\n") ;
printf ("\t\t\t\t\t 0.退出\n") ;
printf ("\t\t\t\t\t *******************\n") ;
printf ("\t\t\t\t\t 请选择你要进行的操作:\n\t\t\t\t\t ") ;
int x ;
fflush (stdin) ;
do {
scanf ("%d", &x) ;
fflush (stdin) ;
switch (x)
{
case 1 :dl() ;break;
case 0 :
printf ("\n\t\t\t\t\t 您选择了退出!") ;
printf ("\n\t\t\t\t\t 正在退出...") ;
printf ("\n\t\t\t\t\t 已退出\n") ;
exit(0) ;
default :
printf ("\t输入有误, 请重新输入:\n\t") ;
printf("请键入任意键重新进行选择!") ;
getchar() ;
}
jm() ;
}
while (x != 0) ;
}

void dl()//登录
{

int len,i,zy;
char ma[6],xuehao[13],password[10]={0};
printf("请输入学生学号: \n");
scanf("%s",&xuehao);
printf("请输入你的专业代码:1.物联网运营与管理 2.物联网网络工程 \n");
scanf("%d",&zy);
int a=123,b=123,c;
c=1;
while(c)
{
printf("请输入账号:");
scanf("%d",&a);
if(a==123)
{
printf("请输入密码:");
scanf("%d",&b);
if(b==123)
{
printf("登陆成功!\n\n");
c=0;
}
else
{
printf("密码错误!\n");
c= 1;
}
}
else
{
printf("用户账号不存在!\n");
c=1;

}
}
system("cls");//清屏语句
gn();
}

void gn () //学生系统功能
{
system ("cls") ;
struct student *a,*b;
int c;
printf ("\n\n\n\n\n\n\t\t\t\t\t 欢迎使用学生系统\n") ;
printf ("\n\t\t\t\t\t **************************") ;
printf ("\n\t\t\t\t\t 1.学生信息录入") ;
printf ("\n\t\t\t\t\t 2.显示学生信息") ;
printf ("\n\t\t\t\t\t 3.增添学生信息") ;
printf ("\n\t\t\t\t\t 4.删除学生信息") ;
printf ("\n\t\t\t\t\t 5.修改学生信息") ;
printf ("\n\t\t\t\t\t 6.返回上一层") ;
printf ("\n\t\t\t\t\t 0.退出") ;
printf ("\n\t\t\t\t\t **************************") ;
printf ("\n\t\t\t\t\t 请选择你要进行的操作(0-6):\n\t\t\t\t\t ") ;
int x ;
do {
scanf ("%d", &x) ;
fflush (stdin) ;
switch (x)
{
case 1 :a=creat();break ;
case 2 :xs(a=0);break;
case 3 :add(a);break;
case 4 :del(a) ;break ;
case 5 :xgxsxx (a,c) ;break ;
case 6 :jm() ;break ;
case 0 :
printf("\n\t\t\t\t\t 您选择了退出!") ;
printf("\n\t\t\t\t\t 正在退出...") ;
printf("\n\t\t\t\t\t 已退出\n") ;
exit (0) ;
default :
printf ("\t\t\t\t\t输入有误, 请重新输入:\n");
printf("请键入任意键重新进行选择!") ;
getchar() ;
}
gn() ;
}
while (x != 0) ;
}

struct student *creat(void)//学生信息录入函数
{
system("cls");
int a;
n=0 ;
struct student *head;
struct student *p1,*p2;
p1=(struct student *)malloc(sizeof(struct student));
printf("请输入第一个学生的姓名,学号,年龄,3门成绩\n");
p1=(struct student *)malloc(sizeof(struct student));
printf("请输入学生的学号:\n");
scanf("%d",&p1->xuehao);
printf("请输入学生的名字:\n");
scanf("%s",p1->name);
printf("请输入学生的语文成绩:\n");
scanf("%s",p1->yuwen);
printf("请输入学生的数学成绩:\n");
scanf("%s",p1->shuxue);
printf("请输入学生的英语成绩:\n");
scanf("%s",p1->english);

head=p1;
p2=p1;
n++;

printf("继续输入请按任意数字键,退出请按0: ");
scanf("%d",&a);
if(a==0)
{
exit(0);
}
while(n<3)
{
printf("请输入第%d学生的姓名,学号,年龄,3门成绩\n",n+1);
p1=(struct student*)malloc(sizeof(struct student));
printf("请输入学生的学号:\n");
scanf("%d",&p1->xuehao);
printf("请输入学生的名字:\n");
scanf("%s",p1->name);
printf("请输入学生的语文成绩:\n");
scanf("%s",p1->yuwen);
printf("请输入学生的数学成绩:\n");
scanf("%s",p1->shuxue);
printf("请输入学生的英语成绩:\n");
scanf("%s",p1->english);
p2->p=p1;
p2=p1;
n++;
system("cls");
}
p2->p=NULL;
return(head);
}

void xs(struct student* head)//显示函数
{
struct student *p;
if(head==NULL)
{
printf("无数据");
return ;
}
p=head;

printf("姓名\t 学号\t 语文\t 数学\t 英语\t\n");
while(p!=NULL)
{
printf("%s\t%s\t%s\t%.2lf\t%.2lf\t%.2lf \n",p->xuehao,p->name,p->yuwen,p->shuxue,p->english);
p=p->next;
}
}

//删除学生信息
void del(struct student* head)
{
struct student*p1,*p2,*q;
int i=0;
int xuehao;
p2=p1=head;
printf("请输入要删除学生的学号:\n");
scanf("%d",&xuehao);
while(p1!=NULL)
{
if(p1->xuehao==xuehao)
{
if(p1 == head)
{
head = p1->next;
}
else if(p1->next == NULL)
{
p2->next = NULL;
}
else
{
p2->next = p1->next;
}
free(p1);break;
}
p2 = p1;
p1 = p1->next;
}
gn();
}



//修改学生信息
struct student *xgxsxx(struct student *head,int xuehao)
{
struct student *p1,*p2;
int a;
p1=head;
if(head==NULL)
{
printf("链表为空");
return(head);
}
else
{
printf("请输入你要修改的信息");
scanf("%d",&a);
if(a==p1->xuehao)
{
printf("修改的姓名:\n");
scanf("%s",p1->name);
printf("修改的学号;\n");
scanf("%d",&p1->xuehao) ;
printf("修改的语文成绩:\n");
scanf("%d",p1->yuwen);
printf("修改的数学成绩:\n");
scanf("%d",p1->shuxue);
printf("修改的英语成绩:\n");
scanf("%d",p1->english);
printf("修改成功");
system("cls");
}
else
{
while(a!=p1->xuehao)
{
p2=p1;
p1=p1->p;
}
printf("修改的姓名:\n");
scanf("%s",p1->name);
printf("修改的学号;\n");
scanf("%d",&p1->xuehao) ;
printf("修改的语文成绩:\n");
scanf("%d",p1->yuwen);
printf("修改的数学成绩:\n");
scanf("%d",p1->shuxue);
printf("修改的英语成绩:\n");
scanf("%d",p1->english);
printf("修改成功");
system("cls");
}
gn();
}
}

struct student *add(struct student*head)//插入节点
{
struct student *p1,*p2,*s;
int a;
p1=head;
p2=(struct student *)malloc(sizeof(struct student));
if(head==NULL)
{
printf("链表为空");
}

else
{
printf("请输入想在哪个同学后面插入");
scanf("%d",&a);
while(a!=p1->xuehao&&p1->p!=NULL)
{
s=p1;
p1=p1->p;
}

if(a==p1->xuehao)
{
s=p1->p;
printf("请输入插入的姓名:\n");
scanf("%s",p2->name);
printf("请输入插入的学号:\n");
scanf("%d",&p2->xuehao);
printf("请输入语文成绩:\n");
scanf("%d",p2->yuwen);
printf("请输入数学成绩:\n");
scanf("%d",p2->shuxue);
printf("请输入英语成绩:\n");
scanf("%d",p2->english);
if(p1->p=NULL)
{
p2->p=NULL;
p1->p = p2;
}
else
{
p2->p = s;
p1->p = p2;
}


}
else
{
printf("请输入插入的姓名:\n");
scanf("%s",p2->name);
printf("请输入插入的学号:\n");
scanf("%d",&p2->xuehao);
printf("请输入语文成绩:\n");
scanf("%d",p2->yuwen);
printf("请输入数学成绩:\n");
scanf("%d",p2->shuxue);
printf("请输入英语成绩:\n");
scanf("%d",p2->english);
s=p1->p;
p2->p=s;
p1->p=p2;
system("cls");
}
}
}
...全文
39 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
GKatHere 2020-01-06
  • 打赏
  • 举报
回复



//////////////////////////////////////////////////////////////////////////

void jm();//学生系统界面
void gn();//学生系统功能界面
void dl();//密码登录界面 
struct student *creat(struct student *head);//学生信息录入
void xs(struct student* head);//学生信息显示
struct student *add(struct student *head);//添加学生信息
void del(struct student* head);//删除学生信息
struct student *xgxsxx(struct student *head);//修改学生信息 

struct student //定义结构体 
{
	int xuehao;
	char name[6];
	int shuxue;
	int yuwen;
	int english;
	float average;
	struct student *p;
	struct student *next;

};
student* studentMalloc()
{
	student *a = (struct student *)malloc(sizeof(struct student));
	memset(a, 0, sizeof(*a));
	return a;
}
void studentFree(student*a)
{
	free(a);
};
student* studentRemove(student* r)
{
	if (!r)		return 0;
	if (r->p) r->p->next = r->next;
	if (r->next) r->next->p = r->p;
	return r;
}
student* studentAdd(student* s, student* t)
{
	if (!s || !t)		return 0;
	s->next = t->next;
	s->p = t;
	t->next = s;
	return s;
}

int n;//定义全局变量 



void jm()  //界面
{
	system("cls");
	printf("\n\n\n\n\n\n\t\t\t\t\t    欢迎进入学生系统\n");
	printf("\t\t\t\t\t   *******************\n");
	printf("\t\t\t\t\t        1.登录\n");
	printf("\t\t\t\t\t        0.退出\n");
	printf("\t\t\t\t\t   *******************\n");
	printf("\t\t\t\t\t  请选择你要进行的操作:\n\t\t\t\t\t  ");
	int x;
	fflush(stdin);
	do {
		scanf_s("%d", &x);
		fflush(stdin);
		switch (x)
		{
		case 1:dl(); break;
		case 0:
			printf("\n\t\t\t\t\t  您选择了退出!");
			printf("\n\t\t\t\t\t  正在退出...");
			printf("\n\t\t\t\t\t  已退出\n");
			exit(0);
		default:
			printf("\t输入有误, 请重新输入:\n\t");
			printf("请键入任意键重新进行选择!");
			//getchar();
		}
		//jm();
	} while (x != 0);
}

void dl()//登录 
{

//	int len, i, zy;
//	char ma[6], xuehao[13], password[10] = { 0 };
// 	printf("请输入学生学号: \n");
// 	scanf_s("%s", &xuehao);
// 	printf("请输入你的专业代码:1.物联网运营与管理 2.物联网网络工程  \n");
// 	scanf_s("%d", &zy);
	int a = 123, b = 123, c;
	c = 1;
	while (c)
	{
		printf("请输入账号:");
		scanf_s("%d", &a);
		if (a == 123)
		{
			printf("请输入密码:");
			scanf_s("%d", &b);
			if (b == 123)
			{
				printf("登陆成功!\n\n");
				c = 0;
			}
			else
			{
				printf("密码错误!\n");
				c = 1;
			}
		}
		else
		{
			printf("用户账号不存在!\n");
			c = 1;

		}
	}
	system("cls");//清屏语句 
	gn();
}

void gn() //学生系统功能 
{
	struct student *a = 0/*, *b*/;
	do {
		system("cls");
		printf("\n\n\n\n\n\n\t\t\t\t\t    欢迎使用学生系统\n");
		printf("\n\t\t\t\t\t     **************************");
		printf("\n\t\t\t\t\t           1.学生信息录入");
		printf("\n\t\t\t\t\t           2.显示学生信息");
		printf("\n\t\t\t\t\t           3.增添学生信息");
		printf("\n\t\t\t\t\t           4.删除学生信息");
		printf("\n\t\t\t\t\t           5.修改学生信息");
		printf("\n\t\t\t\t\t           6.返回上一层");
		printf("\n\t\t\t\t\t           0.退出");
		printf("\n\t\t\t\t\t     **************************");
		printf("\n\t\t\t\t\t     请选择你要进行的操作(0-6):\n\t\t\t\t\t     ");
		int x;
		scanf_s("%d", &x);
		fflush(stdin);
		switch (x)
		{
		case 1:a = creat(a); break;
		case 2:xs(a); break;
		case 3:add(a); break;
		case 4:del(a); break;
		case 5:xgxsxx(a); break;
		case 6:jm(); break;
		case 0:
			printf("\n\t\t\t\t\t     您选择了退出!");
			printf("\n\t\t\t\t\t     正在退出...");
			printf("\n\t\t\t\t\t     已退出\n");
			if (a)
			for (student* p = a->next; a && (p =a->next, 1); a = p)
				studentFree(a);
			return;
		default:
			printf("\t\t\t\t\t输入有误, 请重新输入:\n");
			printf("请键入任意键重新进行选择!");
			getchar();
		}

	} while (1);
}

struct student *creat(struct student *head)//学生信息录入函数
{
	system("cls");
	int a;
	n = 0;
	struct student *p1, *p2;
	if (!head)
		p2 = p1 = head = studentMalloc();
	else
	{
		p1 = studentMalloc();
		p2 = head;
	}
	do
	{
		printf("请输入学生的姓名,学号,年龄,3门成绩\n");
		printf("请输入学生的学号:\n");
		scanf_s("%d", &p1->xuehao);
		printf("请输入学生的名字:\n");
		scanf_s("%s", &p1->name, 6);
		printf("请输入学生的语文成绩:\n");
		scanf_s("%d", &p1->yuwen);
		printf("请输入学生的数学成绩:\n");
		scanf_s("%d", &p1->shuxue);
		printf("请输入学生的英语成绩:\n");
		scanf_s("%d", &p1->english);

		if (p1 != p2)
		{
			studentAdd(p1, p2);
		}
		p2 = p1;

		printf("继续输入请按任意数字键,退出请按0: ");
		scanf_s("%d", &a);
		if (a == 0)
			break;

		p1 = studentMalloc();


	} while (1);

	
	return(head);
}

void xs(struct student* head)//显示函数 
{
	struct student *p;
	if (head == NULL)
	{
		printf("无数据");
		return;
	}
	p = head;

	printf("姓名\t 学号\t 语文\t 数学\t 英语\t\n");
	while (p != NULL)
	{
		printf("%d\t%s\t%d\t%d\t%d\n", p->xuehao, p->name, p->yuwen, p->shuxue, p->english);
		p = p->next;
	}
	getchar(); ///
}

//删除学生信息 
void del(struct student* head)
{
	if (!head)
	{
		printf("链表为空");
		return;
	}

	int xuehao;
	printf("请输入要删除学生的学号:\n");
	scanf_s("%d", &xuehao);

	student* f =0;
	for (struct student*p1 = head; p1; p1 = p1->next)
	{
		if (p1->xuehao == xuehao)
		{
			f = p1;
		}
	}
	if (f)
	{
		studentRemove(f);
		studentFree(f);
	}
}



//修改学生信息
struct student *xgxsxx(struct student *head)
{
	if (head == NULL)
	{
		printf("链表为空");
		return(head);
	}

	int xuehao;
	printf("请输入你要修改的学号");
	scanf_s("%d", &xuehao);

	student* f = 0;
	for (struct student*p1 = head; p1; p1 = p1->next)
	{
		if (p1->xuehao == xuehao)
		{
			f = p1;
		}
	}

	if (f)
	{
		printf("修改的姓名:\n");
		scanf_s("%s", f->name, 6);
		printf("修改的学号;\n");
		scanf_s("%d", &f->xuehao);
		printf("修改的语文成绩:\n");
		scanf_s("%d", &f->yuwen);
		printf("修改的数学成绩:\n");
		scanf_s("%d", &f->shuxue);
		printf("修改的英语成绩:\n");
		scanf_s("%d", &f->english);
		printf("修改成功");
		system("cls");
	}

	return(head);
}

struct student *add(struct student*head)//插入节点 
{
	if (head == NULL)
	{
		printf("链表为空");
		return(head);
	}

	int xuehao;
	printf("请输入想在哪个同学后面插入");
	scanf_s("%d", &xuehao);

	student* f = 0;
	for (struct student*p1 = head; p1; p1 = p1->next)
	{
		if (p1->xuehao == xuehao)
		{
			f = p1;
		}
	}
	if (!f)
	{
		printf("找不到学号");
		return(head);
	}

	student * r = studentMalloc();
	printf("请输入插入的姓名:\n");
	scanf_s("%s", r->name, 6);
	printf("请输入插入的学号:\n");
	scanf_s("%d", &r->xuehao);
	printf("请输入语文成绩:\n");
	scanf_s("%d", &r->yuwen);
	printf("请输入数学成绩:\n");
	scanf_s("%d", &r->shuxue);
	printf("请输入英语成绩:\n");
	scanf_s("%d", &r->english);

	studentAdd(r, f);
	
	return head;
}
// main不变

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧