C语言学生信息管理系统(乞丐版)

C语言学生信息管理系统(简陋版)

内容&思路 : 利用结构体链表,完成学生信息的录入和排序两大功能
因为是自己写的所以称为"简陋版",其中冒泡排序部分参照了别人图书管理系统的写法,但是我现在找不到那个人了,所以就不说了
本人目前大一,数据结构还没学所以程序只能完成两个功能,以后学完后,会更新查找和删除的模块

所以本程序主要是完成两个任务,即录入学生信息和对学生信息指定项排序输出
特点:
1.可以无限录入学生信息,也就是说输入n个学生的信息,n无上限
2.双层结束检测,假如输入录入学生人数10,可以通过输入10个学生的完整信息结束输入,也可以输入小于10个人的完整信息,比如6个,以’ # '结尾即可
3.排序后可以追加学生信息录入,也可以再次选择排序

/*----------------------- ---简要说明(brief_introduce)----------------------**
1.*对仅输入1位同学的信息时,排序无意义,程序不支持对其进行排序*  
2.输入提示:同学们的学号、姓名、性别、专业、学院、3门课成绩需依次对应
例如:
    学号:E02014125  姓名:张三  性别:男  专业:计科  学院:计院
	       语文 : 88.0   数学 : 89.5    英语:90.5 
	       
则录入信息为:E02014125 张三 男 计科 计院 88.0 89.5 90.5 
!!!注意:严格按例输入!
     学号:第1位为大写字母,一共9个字符 
     姓名:2~3个汉字
	  性别:男 or 女
	  专业、学院均为2个汉字
	  3门成绩依次用空格隔开 
**-----------------------------输入小贴士(input_tips)------------------------*/	  
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main_menu();
int sub_menu_1();
int sub_menu_2();
typedef struct Node
{
	 char * num,* name,* gender;  
	 char * major, * depart;
	 float * score;
	 struct Node *next;
}Stu;
void print(Stu *head);
Stu *bubble_sort(Stu *head, int n);
void create();
int main(void)
{	
   create();
	printf("谢谢使用!");
	system("pause");
	return 0;
}
int main_menu()
{
	int n;
	printf("---------------主菜单---------------\n");
	printf("* (1)学号, 名字, 性别, 专业, 院系  *\n");
	printf("*       (2)语、数、外成绩          *\n");
	printf("-------------请选择数字-------------\n");
	scanf("%d", &n);
	while(n != 1 && n != 2)
	{
		printf("输入错误!\n");
		printf("请再次输入一个范围内的数字:\n");
		scanf(" %d", &n);
	}
	return n;
}
int sub_menu_1()
{
	int n;
	printf("------------副菜单1------------\n");
	printf("*(0) 学号, (1) 名字 , (2) 性别*\n");
	printf("*     (3) 专业,  (4) 院系    * \n");
	printf("-----------请选择数字----------\n");
	scanf("%d", &n);
	while(n < 0 || n > 4)
	{
		printf("输入错误!\n");
		printf("请再次输入一个范围内的数字:\n");
		scanf(" %d", &n);
	}
	return n;
}
int sub_menu_2()
{
	int n;
	printf("------------副菜单2-----------\n");
	printf("* (1)语文, (2)英语, (3)数学  *\n");
	printf("---------请选择一个数字-------\n");
	scanf("%d", &n);
	while(n < 1 || n > 4)
	{
		printf("输入错误!\n");
		printf("请再次输入一个范围内的数字:\n");
		scanf("%d", &n);
	}
	return n;
}
void create()
{
	 Stu *head, *p, *q, *pd; 
	 char ch;
	 char *num, *name, *gender, *major, *depart;
	 float *score;
	 int i, n = 0;
	 num = (char *)malloc(10*sizeof(char));
	 head = (Stu *)malloc(sizeof(Stu));
	 head->next = NULL;
	 q = head;
	 p = head->next;
    printf("1.添加学生信息  2.对学生信息排序  3.关闭程序\n");
    printf("请输入指令:\n");
	 while((scanf("%d", &i)) != 1)
	   printf("输入不合法!请重新输入:\n");
    do
    {   
	   if(i == 1)
		{
			 printf("请输入需要录入的人数:\n");
			 while((scanf("%d", &n)) != 1)
			   printf("输入不合法!请重新输入:\n");
			 printf("请输入学生的学号,姓名,性别,专业,院系");
			 printf("和三门课的成绩: 按#键结束\n");
			 scanf("%s", num);
			 while (num[0] != '#') 
			 {
				  p = (Stu *)malloc(sizeof(Stu));
				  p->num = num;
				  name = (char *)malloc(7*sizeof(char));
				  gender = (char *)malloc(3*sizeof(char));
				  major = (char *)malloc(5*sizeof(char));
				  depart = (char *)malloc(5*sizeof(char));
				  score = (float *)malloc(3*sizeof(float));
				  scanf("%s %s %s",name,gender,major);
				  scanf("%s %f %f %f",depart,&score[0],&score[1],&score[2]);
				  p->name = name;
				  p->gender = gender;
				  p->major = major;
				  p->depart = depart;
				  p->score = score;
				  p->next = NULL;
				  q->next = p;
				  q = p;
		        n = n - 1;
		        if(!n)
				  {
				  	  n = -1;
				  	  printf("录入成功!");
				  	  print(head);
				  	  break;
				  }		  
				  num = (char *)malloc(10*sizeof(char));
				  scanf(" %s", num);
			 }
			 if(n != -1)
			 {
			    printf("录入成功!");
			    print(head);
			 }
			 printf("任务1结束...\n");
		}
		else if(i == 2)
	   {
	  	   q = p = bubble_sort(head,main_menu());
	  	   print(head);
	  	   printf("任务2结束!...\n");
	   }
	   else
	   {
		   printf("谢谢使用!"); 
		   exit(0);
		}
	   printf("1.添加学生信息  2.对学生信息排序  3.关闭程序\n");
      printf("请输入指令:\n");
		scanf(" %d", &i);
	 }while(i == 1 || i == 2);
	 return; 
}
Stu *bubble_sort(Stu *head, int n)
{
	 Stu *pre, *p, *tail, *temp;
	 int m;
	 tail = NULL;
	 pre = head;
	 if(n == 1)
	   n = sub_menu_1();
	 else
	 {
	    n = 5;
	    m = sub_menu_2() - 1;
	 }
	 while ((head->next->next) != tail) 
	 {
		  p = head->next;
		  pre = head;
		  while (p->next != tail)
		  {
		  	   if(n == 0)
		  	   {
				   if (strcmp((p->num),(p->next->num)) > 0)
				   {
					    pre->next = p->next; 
					    temp = p->next->next;
					    p->next->next = p;
					    p->next = temp;
					    p = pre->next;
				   }
				}
				else if(n == 1)
				{
				   if (strcmp((p->name),(p->next->name)) > 0)
				   {
					    pre->next = p->next; 
					    temp = p->next->next;
					    p->next->next = p;
					    p->next = temp;
					    p = pre->next;
				   }
				}
				else if(n == 2)
				{
				   if (strcmp((p->gender),(p->next->gender)) > 0)
				   {
					    pre->next = p->next; 
					    temp = p->next->next;
					    p->next->next = p;
					    p->next = temp;
					    p = pre->next;
				   }
				}
				else if(n == 3)
				{
				   if (strcmp((p->major),(p->next->major)) > 0)
				   {
					    pre->next = p->next; 
					    temp = p->next->next;
					    p->next->next = p;
					    p->next = temp;
					    p = pre->next;
				   }
				}
				else if(n == 4)
				{
				   if (strcmp((p->depart),(p->next->depart)) > 0)
				   {
					    pre->next = p->next; 
					    temp = p->next->next;
					    p->next->next = p;
					    p->next = temp;
					    p = pre->next;
				   }
				}
				else if(n == 5)
				{
					 if ((p->score[m])>(p->next->score[m]))
			       {
					    pre->next = p->next; 
					    temp = p->next->next;
					    p->next->next = p;
					    p->next = temp;
					    p = pre->next;
			       }
				}
				p = p->next; 
				pre = pre->next;
			} 
			tail = p; 
	 }
	 while(p->next != NULL)
	   p = p->next;
	 return p;
}
void print(Stu *head)
{
	 int i;
	 Stu *p = head->next;
	 printf("Ranking-List输出:\n");
	 printf("*-*-*-*-*-*-*-*-*-*-*-*-*-*学生信息表-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");
	 printf("学号      姓名     性别     专业     学院     语文    数学    英语\n");
	 while (p) 
	 {
	    printf("%-6s %-6s   %-8s %-6s   %-6s ",p->num,p->name,p->gender,p->major,p->depart);
	    printf("  %-6.2f  %-6.2f  %-6.2f\n",p->score[0],p->score[1],p->score[2]);
	    p = p->next;
	 }
	 printf("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");
}

运行结果
运行结果

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值