学生成绩管理系统

第一次写博客,加油,后面写出更好的!
题目如下:

设置一个学生成绩管理系统,基本实现学生成绩的输入,统计,查找,删除

文章目录

  • 一.课程设计目的
  • 二.课程设计内容和要求
  • 三.任务完成情况
  • 四.设计报告
    • 4.1需求分析
      • 4.1.1用户需求
      • 4.2.1总体设计
      • 4.2.2各功能函数的设计
    • 4.3详细设计
      • 4.3.1 程序流程图
    • 4.4详细代码
      • 4.4.1结构体定义
      • 4.4.2 函数声明
      • 4.4.3 主函数
      • 4.4.4 界面和选择菜单项函数
      • 4.4.5 录入学生信息函数
      • 4.4.6打印学生信息函数
      • 4.4.7 查找学生信息函数
      • 4.4.8 修改学生信息函数
      • 4.4.9删除学生信息函数
      • 4.4.10 系统介绍和注意函数
    • 4.5使用说明
    • 4.6测试结果与分析
    • 4.7参考文献
  • 五.体会与感想
  • 附录

一.课程设计目的

1.用学到的C语言,实现一个学生成绩管理系统。
2.加强对链表的熟练操作。
3.加强对结构体的应用

二.课程设计内容和要求

系统以菜单方式工作,能够提供以下功能:
0.录入学生信息功能 ―――开辟节点,存入学生信息,头插法将节点添加到链表中
1.浏览学生信息功能 ―――遍历链表,判断学生信息头节点是否为空,如果为空代表无任何信息,当不为空时打印信息,然后指向下一个节点
2.查找学生信息功能 ―――遍历(搜索)链表,找到相关节点数据,逐个匹配,一致时打印结果。
具体描述:输入要查找的学生姓名,if语句进行判断匹配,一致时输出学生信息,不匹配时,p指向下一个节点,单链表继续,直到单链表结束(用到了while循环)。
3.修改学生信息功能 ―――遍历(搜索)链表,找到相关节点数据,逐个匹配,一致时进行修改。
具体描述:输入要修改的学生学号,if语句进行判断匹配,一致时进行修改,不匹配时,p指向下一个节点,单链表继续,直到单链表结束(用到了while循环)
4.删除学生信息功能 ―――遍历(搜索)链表,找到相关节点数据,逐个匹配,一致时进行删除。
具体描述:输入要删除的学生学号,if语句进行判断匹配,一致时进行删除,不匹配时,p指向下一个节点,单链表继续,直到单链表结束(用到了while循环)

三.任务完成情况

1.按照系统提示录入学生的学号、姓名、语文成绩、高数成绩、英语成绩。
2.用户浏览学生信息时,可以知晓学生的学号、姓名、语文成绩、高数成绩、英语成绩、各科成绩的总分。
3.用户查找学生信息时,要输入学生的姓名
4.用户修改学生信息时和删除学生时,要输入学生的学号

四.设计报告

4.1需求分析

4.1.1用户需求

(1)界面美观,给用户以视觉上的享受。
(2)菜单里的功能给予编号,排列清晰,便于用户选择
(3)当用户录入的学生信息有多余和出错时,用户可以选择修改和删除功能。

4.2.1总体设计

学生成绩管理系统_第1张图片

图4-1

4.2.2各功能函数的设计

(1)界面和选择菜单项
(2)录入学生信息
(3)打印学生信息
(4)查找学生信息
(5)修改学生信息
(6)删除学生信息
(7)系统介绍和注意

4.3详细设计

4.3.1 程序流程图

学生成绩管理系统_第2张图片

图4-2
学生成绩管理系统_第3张图片

图4-3

学生成绩管理系统_第4张图片

图4-4

4.4详细代码

4.4.1结构体定义

该系统包含的库函数具体有:

 #include
 #include
 #include
 #include  

定义学生的结构体,链表节点结构体

typedef struct _student//typedef取别名  struct关键字 Stu结构体的名称 
   {
    int    num;//学号  
   	char   name[20];//姓名 
     int   chinese;// 语文
     int   hMath;//高数
     int   english;//英语 
     int   total;//总数 
    } student;//student学生结构体类型 把结构的别名取做student  
       /*链表:数据结构。相当于一列火车,有头结点,尾结点 。链表由许多的节点组成,就好比一列车厢
 。结点:数据域(存储数据)和指针域(指向下一个节点)*/
  typedef struct _Node 
  { 	
    student stu;     //数据域,用于存储数据 ,学生信息  	
    struct _Node*  next;//指针,可以用来访问节点数据,遍历,指向下一个节点的指针
  }Node;    
 //定义一个链表
  Node*  g_pHead=NULL;//链表的头结点

4.4.2 函数声明

 void menu(); //菜单 
 void keyDown();//选择菜单项  
 void Inputstudent();//录入信息
 void PrintStudent();//打印信息
 void FinfStudent();//查找学生信息
 void ChangeStudent();//修改
 void DeleteStudent();//删除 
 void help();//系统介绍

4.4.3 主函数

int main()
{
	 	while(1)
	{
			menu();
			keyDown();
			system("pause");
			system("cls");//清屏
			} 
   system("pause");
	 return 0;
}

4.4.4 界面和选择菜单项函数

界面
void menu()
{ 
    printf("\n");
    printf("\t\t\t      欢迎使用学生成绩管理系统,祝您使用愉快!                \t\t\t\n\n");
    printf("\t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n\n");
    printf("\t★\t\t\t*****************************************************\t\t\t\t★\n\n");
    printf("\t★\t\t\t\t 【学 生 成 绩 管 理 系 统】   \t\t\t\t\t\t★\n\n");
    printf("\t★\t\t\t  制作者:段玥倩 专业:软件工程 学号:200207401\t\t\t\t\t★\n\n");
    printf("\t★\t\t\t*****************************************************\t\t\t\t★\n\n");
	printf("\t★\t\t\t*********************系统功能菜单*************************     \t\t\t★\n");
	printf("\t★\t\t\t     ---------------------------------------------      \t\t\t★ \n");
    printf("\t★\t\t\t     | 0.录入学生信息                            |      \t\t\t★\n");
	printf("\t★\t\t\t     | 1.浏览学生信息                            |      \t\t\t★\n");
	printf("\t★\t\t\t     | 2.查询学生信息                            |      \t\t\t★\n");
	printf("\t★\t\t\t     | 3.修改学生信息                            |      \t\t\t★\n");
	printf("\t★\t\t\t     | 4.删除学生信息                            |      \t\t\t★\n");
	printf("\t★\t\t\t     | 5.该系统介绍和注意                        |      \t\t\t★\n");
	printf("\t★\t\t\t     | 6.退出系统                                |      \t\t\t★\n");
	printf("\t★\t\t\t     ---------------------------------------------       \t\t\t★\n");
	printf("\t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n\n");
    printf("\t\t\t\t请选择系统功能菜单编号:");
}
选择菜单项
void keyDown()
{
	int choice=0;
	scanf("%d",&choice);
	switch(choice)
	{
		case 0:
		    printf("----------------[录入学生信息]-------------------------\n"); 
		     Inputstudent();
			break; //跳转  
		 case 1:	
		   printf("----------------[浏览学生信息]-------------------------\n"); 
		     PrintStudent(); 
			break; //跳转  
		case 2:
			printf("----------------[查询学生信息]-------------------------\n"); 
		    FinfStudent();
			break;   
		case 3:
			printf("----------------[修改学生信息 ]-------------------------\n"); 
			ChangeStudent();
			break;   
		case 4:
			printf("----------------[按学号删除信息]-------------------------\n"); 
		   DeleteStudent();
		    break;
		case 5:
			printf("----------------[系统介绍和注意]-------------------------\n"); 
		  help(); 
			break;
	    case 6:
			printf("正常退出!\n");
			system("pause");//防止闪屏 
			exit(0);//直接退出 
			break; 
		default:
			printf("选择错误,重新输入,请在0-6之间选择\n");
			system("pause");//防止闪屏 
		    break;    
	}
}

4.4.5 录入学生信息函数

void Inputstudent()
{
	system("cls");
	//开辟一个节点,分配内存 
   Node* p = (Node*)malloc(sizeof(Node)); //malloc函数定义在头文件 
   p->next = NULL;//指针下一个指向空 
   p->stu.total = 0;
   printf("请输入学生的学号:\n");  
   scanf("%d",&p->stu.num); 
   printf("请输入学生的姓名:\n");
   scanf("%s",p->stu.name);
   
   printf("请输入语文成绩:\n");
   scanf("%d",&p->stu.chinese );
   p->stu.total += p->stu.chinese;
   
   printf("请输入高数成绩:\n");
   scanf("%d",&p->stu.hMath);
    p->stu.total += p->stu.hMath;
    
   printf("请输入英语成绩: \n");
   scanf("%d",&p->stu.english);
   p->stu.total +=p->stu.english;
     //将节点添加到链表中
     
   if(g_pHead == NULL)
   {
   	 g_pHead=p;
	} 
    else 
    {
       p->next = g_pHead;
	   g_pHead = p;//头插法	
	}
	printf("学生信息录入成功。\n");
	 system("pause");//暂停 
     system("cls");//清屏 
} 

4.4.6打印学生信息函数

void PrintStudent()
{
	system("cls");
	//遍历链表 
    Node* p = g_pHead;
    if(p==NULL){
	 	printf("系统中无该学生信息,请录入后再查看。\n"); 
	}
	else{
	printf("*********************************************************************************\n");
    printf("*\t\t\t欢迎使用高校学生成绩管理系统   \t\t\t*\n");
	printf("*********************************************************************************\n");
	printf("* \t学号\t* \t姓名\t* \t语文\t* \t高数\t* \t英语\t \t总分\t*\n");
	printf("-------------------------------------------------------------------------------------------------\n");
	

  while(p != NULL)
    {
    	printf("* \t%d\t* \t%s\t* \t%d\t* \t%d\t* \t%d\t* \t%d\t*\n"
		,p->stu.num,p->stu.name,p->stu.chinese,p->stu.hMath,p->stu.english,p->stu.total);
	       p = p->next;//下一个节点 
	}
       }
       system("pause");
       system("cls");
}

4.4.7 查找学生信息函数

void FinfStudent()
{
	system("cls");
	char name[20];
	printf("\n\n");
	printf("\t\t\t----------------------------\n");
	printf("\t\t\t|      正在查找学生        |\n");
	printf("\t\t\t----------------------------\n");
	printf("请输入查找学生的姓名:");
	scanf("%s",name);
	//遍历链表查找,查找后进行信息显示
	Node* p = g_pHead;
	//对表头及进行展示一次
	int isShowHead = 0;//0为假,1为真 
	//记录是否找到该学生	
	int isFindStu = 0;
	while(p != NULL)
	{
		if( !strcmp(p->stu.name , name)  ) //对比姓名,是否一致 
		{
			if(!isShowHead)
			{
	            printf("*********************************************************************************\n");
             	printf("* \t学号\t* \t姓名\t* \t语文\t* \t高数\t* \t英语\t \t总分\t*\n");
	            printf("-------------------------------------------------------------------------------------------------\n");
             	isShowHead = 1;
			}
		printf("* \t%d\t* \t%s\t* \t%d\t* \t%d\t* \t%d\t* \t%d\t*\n"
	  ,p->stu.num,p->stu.name,p->stu.chinese,p->stu.hMath,p->stu.english,p->stu.total);
			isFindStu = 1;
		}
		p = p->next ;
	 }
	 if(!isFindStu){
	 	printf("输入有误,系统暂无学生信息。\n\n");
	 }
	   system("pause");
	   system("cls");
 } 

4.4.8 修改学生信息函数

 void ChangeStudent()
 {
   system("cls");
 	int num;
 	printf("请输入要修改学生的学号:");
	scanf("%d",&num); 
	//遍历链表
	Node* p = g_pHead;
	//对表头进行展示一次
    int isShowHead = 0;//
	//记录是否找到该学生	
	int isFindStu = 0;
	while(p!=NULL)
	{
		if(num == p->stu.num  )
		{
				if(!isShowHead)
			{
	            printf("*********************************************************************************\n");
             	printf("* \t学号\t* \t姓名\t* \t语文\t* \t高数\t* \t英语\t \t总分\t*\n");
	            printf("-------------------------------------------------------------------------------------------------\n");
             	isShowHead = 1;
			}
					printf("* \t%d\t* \t%s\t* \t%d\t* \t%d\t* \t%d\t* \t%d\t*\n"
	  ,p->stu.num,p->stu.name,p->stu.chinese,p->stu.hMath,p->stu.english,p->stu.total);
		
		//修改学生信息
		  p->stu.total = 0;
   printf("请输入要修改学生的学号:\n");  
   scanf("%d",&p->stu.num); 
   printf("请输入要修改学生的姓名:\n");
   scanf("%s",p->stu.name);
   printf("请输入要修改语文成绩:\n");
   scanf("%d",&p->stu.chinese );
   p->stu.total += p->stu.chinese;
  
  
  printf("请输入要修改高数成绩:\n");
   scanf("%d",&p->stu.hMath);
    p->stu.total += p->stu.hMath;
    
  printf("请输入要修改英语成绩: \n");
   scanf("%d",&p->stu.english);
   p->stu.total +=p->stu.english;
  
   isFindStu = true;
   printf("学生信息修改成功。\n\n"); 
		}
		p = p->next;
	 } 
	  if(!isFindStu){
	 	printf("学号输出有误,系统没有该学生信息,无法修改。\n\n");
	 }
	 system("pause");
	 system("cls");
} 

4.4.9删除学生信息函数

void DeleteStudent()
{
	system("cls");
	int num;
	printf("请输入删除学生的学号:");
	scanf("%d",&num);
		//遍历链表
	Node* p = g_pHead;
	//记录前一个节点,删除时方便操作
	 Node* beforeNode = g_pHead;
	//对表头进行展示一次
    int isShowHead = 0;//
	//记录是否找到该学生	
	int isFindStu = 0;
		while(p!=NULL)
	{
		if(num == p->stu.num  )
		{
				if(!isShowHead)
		     	{
	            printf("*********************************************************************************\n");
             	printf("* \t学号\t* \t姓名\t* \t语文\t* \t高数\t* \t英语\t \t总分\t*\n");
	            printf("-------------------------------------------------------------------------------------------------\n");
             	isShowHead = 1;
			    }
			  	printf("* \t%d\t* \t%s\t* \t%d\t* \t%d\t* \t%d\t* \t%d\t*\n"
	  ,p->stu.num,p->stu.name,p->stu.chinese,p->stu.hMath,p->stu.english,p->stu.total);
 isFindStu = 1;
        
             //删除节点为头节点
		        if(p == g_pHead)
		        {
		     	g_pHead = p->next ;
		         } 
		     //删除节点为尾节点
		     else if (p->next == NULL)
		       {
		    	p->next  = NULL;
		       } 
		     //删除节点为中间节点
               else{
         	  beforeNode->next = p->next ;
		        }           
		 printf("删除成功。\n\n");
		 
        }
	 beforeNode = p;
	 p = p->next ; 
    }
    if(!isFindStu){
    	printf("学号输入有误,系统没有该学生信息,无法删除操作。\n\n");
	}
	system("pause");
	system("cls");
	}

4.4.10 系统介绍和注意函数

 void help()
{
	printf("\n  欢迎使用系统帮助!\n");
	printf("\n1.初次进入系统后,请先录入学生信息;\n");
	printf("\n2.按照菜单提示键入数字代号;\n");
	printf("\n3.成绩录入时必须是整数;\n");
	printf("\n4.谢谢您的使用!\n");
}  

4.5使用说明

对于初次使用的用户可先输入数字5,查看该系统的介绍和注意事项

4.6测试结果与分析

主界面如图4-5
学生成绩管理系统_第5张图片

浏览学生信息如图4-6
学生成绩管理系统_第6张图片

查找学生信息如图4-7
学生成绩管理系统_第7张图片

修改学生信息如图4-8
学生成绩管理系统_第8张图片

删除学生信息如图4-9
学生成绩管理系统_第9张图片

4.7参考文献

《C Primer Plus》(第6版)中文版

五.体会与感想

这个系统还有许多缺陷,
(1).录入学生信息时,只能是录入完一个后返回菜单再录入下一个,过程太繁琐
(2).录入的学生信息中缺少成绩排序功能
(3).录入的成绩只能为整数
开始呢是无从下爪,到做出来之后,这个过程是遇到问题,解决问题。学习其他人的经验,然后总结自己的思路。所以往后的学习也是不断发现问题,从而解决它。

附录



#include
#include
#include
#include   
 
//定义学生的结构
typedef struct _student//typedef取别名  struct关键字 Stu结构体的名称 
{
	int    num;//学号 
	char   name[20];//姓名 
    int   chinese;// 语文
    int   hMath;//高数
    int   english;//英语 
    int   total;//总数 
   
}student;//student学生结构体类型 把结构的别名取做student
typedef struct _Node
{
	student stu;       //数据域,用于存储数据 ,学生信息 
	struct _Node*  next;//指针
 }Node; 
 
//定义一个链表
Node* g_pHead=NULL;//链表的头结点 

void menu(); //菜单 
void keyDown();//选择菜单项 
void Inputstudent();//录入信息
void PrintStudent();//打印信息 
void FinfStudent();//查找学生信息
void ChangeStudent();//修改 
void DeleteStudent();//删除 
void help();//系统介绍 

//主函数 
int main()
{
	 
	while(1)
	{
			menu();
			keyDown();
			system("pause");
			system("cls");//清屏
			
	} 
   
	system("pause");
	 
	return 0;
}

//界面 
void menu()
{ 
    printf("\n");
    printf("\t\t\t      欢迎使用学生成绩管理系统,祝您使用愉快!                \t\t\t\n\n");
    printf("\t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n\n");
    printf("\t★\t\t\t*****************************************************\t\t\t\t★\n\n");
    printf("\t★\t\t\t\t 【学 生 成 绩 管 理 系 统】   \t\t\t\t\t\t★\n\n");
    printf("\t★\t\t\t  制作者:段玥倩 专业:软件工程 学号:200207401\t\t\t\t\t★\n\n");
    printf("\t★\t\t\t*****************************************************\t\t\t\t★\n\n");
	printf("\t★\t\t\t*********************系统功能菜单*************************     \t\t\t★\n");
	printf("\t★\t\t\t     ---------------------------------------------      \t\t\t★ \n");
    printf("\t★\t\t\t     | 0.录入学生信息                            |      \t\t\t★\n");
	printf("\t★\t\t\t     | 1.浏览学生信息                            |      \t\t\t★\n");
	printf("\t★\t\t\t     | 2.查询学生信息                            |      \t\t\t★\n");
	printf("\t★\t\t\t     | 3.修改学生信息                            |      \t\t\t★\n");
	printf("\t★\t\t\t     | 4.删除学生信息                            |      \t\t\t★\n");
	printf("\t★\t\t\t     | 5.该系统介绍和注意                        |      \t\t\t★\n");
	printf("\t★\t\t\t     | 6.退出系统                                |      \t\t\t★\n");
	printf("\t★\t\t\t     ---------------------------------------------       \t\t\t★\n");
	printf("\t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n\n");
    printf("\t\t\t\t请选择系统功能菜单编号:");
}
void keyDown()//选择菜单项 
{
	int choice=0;
	scanf("%d",&choice);
	switch(choice)
	{
		case 0:
		    printf("----------------[录入学生信息]-------------------------\n"); 
		     Inputstudent();
			break; //跳转  
		 
		case 1:	
		   
			printf("----------------[浏览学生信息]-------------------------\n"); 
		    PrintStudent(); 
			break; //跳转  
		case 2:
			printf("----------------[查询学生信息]-------------------------\n"); 
		    FinfStudent();
			break;   
		case 3:
			printf("----------------[修改学生信息 ]-------------------------\n"); 
			ChangeStudent();
			break;   
		case 4:
			printf("----------------[按学号删除信息]-------------------------\n"); 
		   DeleteStudent();
		    break;
		case 5:
			printf("----------------[系统介绍和注意]-------------------------\n"); 
		  help(); 
			break;
	    case 6:
			printf("正常退出!\n");
			system("pause");//防止闪屏 
			exit(0);//直接退出 
			break; 
		default:
			printf("选择错误,重新输入,请在0-6之间选择\n");
			system("pause");//防止闪屏 
		    break;    
	}
}

//录入学生信息
void Inputstudent()
{
	system("cls");
	//开辟一个节点,分配内存 
   Node* p = (Node*)malloc(sizeof(Node)); //malloc函数定义在头文件 
   p->next = NULL;//指针下一个指向空 
     p->stu.total = 0;
   printf("请输入学生的学号:\n");  
   scanf("%d",&p->stu.num); 
   printf("请输入学生的姓名:\n");
   scanf("%s",p->stu.name);
   printf("请输入语文成绩:\n");
   scanf("%d",&p->stu.chinese );
   p->stu.total += p->stu.chinese;
    printf("请输入高数成绩:\n");
   scanf("%d",&p->stu.hMath);
    p->stu.total += p->stu.hMath;
    
   printf("请输入英语成绩: \n");
   scanf("%d",&p->stu.english);
   p->stu.total +=p->stu.english;
   >
  //将节点添加到链表中
   if(g_pHead == NULL)
   {
   	 g_pHead=p;
	} 
    else 
    {
       p->next = g_pHead;
	   g_pHead = p;//头插法	
	}
	printf("学生信息录入成功。\n");
	 system("pause");//暂停 
     system("cls");//清屏 
} 

//打印学生信息 
void PrintStudent()
{
	system("cls");
	//遍历链表 
    Node* p = g_pHead;
   
	if(p==NULL){
		printf("系统中无该学生信息,请录入后再查看。\n"); 
	}
	else{
	printf("*********************************************************************************\n");
    printf("*\t\t\t欢迎使用高校学生成绩管理系统   \t\t\t*\n");
	printf("*********************************************************************************\n");
	printf("* \t学号\t* \t姓名\t* \t语文\t* \t高数\t* \t英语\t \t总分\t*\n");
	printf("------------------------------------------------------------------------------------------->------\n");
	

    while(p != NULL)
    {
    	printf("* \t%d\t* \t%s\t* \t%d\t* \t%d\t* \t%d\t* \t%d\t*\n"
		,p->stu.num,p->stu.name,p->stu.chinese,p->stu.hMath,p->stu.english,p->stu.total);
	  
	    p = p->next;//下一个节点 
	}
       }
       system("pause");
       system("cls");
}

//查找学生信息
void FinfStudent()
{
	system("cls");
	
	char name[20];
	printf("\n\n");
	printf("\t\t\t----------------------------\n");
	printf("\t\t\t|      正在查看学生        |\n");
	printf("\t\t\t----------------------------\n");
	printf("请输入查找学生的姓名:");
	scanf("%s",name);
	//遍历链表查找,查找后进行信息显示
	Node* p = g_pHead;
	//对表头及进行展示一次
	int isShowHead = 0;//0为假,1为真 
	//记录是否找到该学生	
	int isFindStu = 0;
	while(p != NULL)
	{
		if( !strcmp(p->stu.name , name)  ) //对比姓名,是否一致 
		{
			if(!isShowHead)
			{
	            printf("*********************************************************************************\n");
             	printf("* \t学号\t* \t姓名\t* \t语文\t* \t高数\t* \t英语\t \t总分\t*\n");
	            printf("-------------------------------------------------------------------------------------------------\n");
             	isShowHead = 1;
			}
		printf("* \t%d\t* \t%s\t* \t%d\t* \t%d\t* \t%d\t* \t%d\t*\n"
	  ,p->stu.num,p->stu.name,p->stu.chinese,p->stu.hMath,p->stu.english,p->stu.total);
>		
>		isFindStu = 1;
	>	}
		p = p->next ;
	 }
	 if(!isFindStu){
	 	printf("输入有误,系统暂无学生信息。\n\n");
	 }
	   system("pause");
	   system("cls");
 } 
 
 //修改学生信息
 void ChangeStudent()
 {
 	int num;
 	printf("请输入要修改学生的学号:");
	scanf("%d",&num); 
	//遍历链表
	Node* p = g_pHead;
	//对表头进行展示一次
    int isShowHead = 0;//
	//记录是否找到该学生	
	int isFindStu = 0;
	while(p!=NULL)
	{
		if(num == p->stu.num  )
		{
				if(!isShowHead)
			{
	            printf("*********************************************************************************\n");
             	printf("* \t学号\t* \t姓名\t* \t语文\t* \t高数\t* \t英语\t \t总分\t*\n");
	            printf("-------------------------------------------------------------------------------------------------\n");
             	isShowHead = 1;
			}
				
		printf("* \t%d\t* \t%s\t* \t%d\t* \t%d\t* \t%d\t* \t%d\t*\n"
	  ,p->stu.num,p->stu.name,p->stu.chinese,p->stu.hMath,p->stu.english,p->stu.total);
	
		//修改学生信息
		  p->stu.total = 0;
  printf("请输入要修改学生的学号:\n");  
   scanf("%d",&p->stu.num); 
   printf("请输入要修改学生的姓名:\n");
   scanf("%s",p->stu.name);
   printf("请输入要修改语文成绩:\n");
   scanf("%d",&p->stu.chinese );
   p->stu.total += p->stu.chinese;
   
   printf("请输入要修改高数成绩:\n");
   scanf("%d",&p->stu.hMath);
    p->stu.total += p->stu.hMath;
   
  printf("请输入要修改英语成绩: \n");
   scanf("%d",&p->stu.english);
   p->stu.total +=p->stu.english;
  
   isFindStu = true;
   printf("学生信息修改成功。\n\n"); 
		}
		p = p->next;
	 } 
	  if(!isFindStu){
	 	printf("学号输出有误,系统没有该学生信息,无法修改。\n\n");
	 }
	 system("pause");
	 system("cls");
} 

//删除学生信息
void DeleteStudent()
{
	system("cls");
	int num;
	printf("请输入删除学生的学号:");
	scanf("%d",&num);
		//遍历链表
	Node* p = g_pHead;
	//记录前一个节点,删除时方便操作
	 Node* beforeNode = g_pHead;
	//对表头进行展示一次
    int isShowHead = 0;//
	//记录是否找到该学生	
	int isFindStu = 0;
		while(p!=NULL)
	{
		if(num == p->stu.num  )
		{
				if(!isShowHead)
		     	{
	            printf("*********************************************************************************\n");
             	printf("* \t学号\t* \t姓名\t* \t语文\t* \t高数\t* \t英语\t \t总分\t*\n");
	            printf("-------------------------------------------------------------------------------------------------\n");
             	isShowHead = 1;
			    }
			  	
		printf("* \t%d\t* \t%s\t* \t%d\t* \t%d\t* \t%d\t* \t%d\t*\n"
	  ,p->stu.num,p->stu.name,p->stu.chinese,p->stu.hMath,p->stu.english,p->stu.total);
 
        isFindStu = 1;
       
              //删除节点为头节点
		        if(p == g_pHead)
		        {
		     	g_pHead = p->next ;
		         } 
		     //删除节点为尾节点
		   else if (p->next == NULL)
		       {
		     	p=beforeNode;
		    	p->next  = NULL;
		       } 
		     //删除节点为中间节点
               else{
         	  beforeNode->next = p->next ;
		        }           
		 printf("删除成功。\n\n");
		
       }
	 beforeNode = p;
	 p = p->next ; 
    }
    if(!isFindStu){
    	printf("学号输入有误,系统没有该学生信息,无法删除操作。\n\n");
	}
system("pause");
system("cls");
}

//系统介绍 
 void help()
{
	printf("\n  欢迎使用系统帮助!\n");
	printf("\n1.初次进入系统后,请先录入学生信息;\n");
	printf("\n2.按照菜单提示键入数字代号;\n");
	printf("\n3.成绩录入时必须是整数;\n");
	printf("\n4.谢谢您的使用!\n");
}

你可能感兴趣的:(链表)