学生信息高级管理系统学生时代小作品源码(C语言版)

/*1按学期 班级完成录入,修改

2按班级统计学生成绩,求学生的总分及平均分,并能根据平均分进行排序

3能查询学生成绩,不及格科目以及学生名单

4能按班级输出学生的成绩单

*/

/***********************************************************************************

本作品作者:danyuan         湖南理工学院         专业:信息工程

 

***********************************************************************************/

#include <stdio.h>

#include <stdlib.h>

typedef struct stu{                               //学生结点

         char name[20];

         char id_number[20];

         double chinese_score;

         double english_score;

         double math_score;

         double c_program;

         double total_score;

         double averge_score;

         struct stu *next;

}Student;

typedef struct cla{                                        //班级结点

         char class_name[20];

         int pass_number;

         int total_number;

         struct cla *cnext;

         Student *first_next;

}Class;

typedef struct t{                                   //学期结点

         char term_number[20];

         struct t *tnext;

         Class *first_class;

}Term;

typedef struct inf{                                //头结点

         Term *head;

}Infor;

 

 

void init_head(Infor *I)//初始化头结点

{

         I->head=NULL;

}

 

void caculate_score(Student *S)//计算总分和平均分

{

         S->total_score = S->c_program + S->chinese_score + S->english_score + S->math_score;

         S->averge_score = S->total_score/3.0;

}

 

void input_student(Class *C)//输入学生信息

{

         Student *p=(Student*)malloc(sizeof(Student));

         p->next=C->first_next;

         C->first_next=p;

         printf("\t\t请输入学生信息:(输入每一步骤完毕后,请按回车进行下一步操作)\n");

         printf("\t\t学号:");

         scanf("%s",p->id_number);

         printf("\t\t姓名:");

         scanf("%s",p->name);

         printf("\t\t英语成绩:");

         scanf("%lf",&p->english_score);

         printf("\t\t语文成绩:");

         scanf("%lf",&(p->chinese_score));

         printf("\t\t数学成绩:");

         scanf("%lf",&p->math_score);

         printf("\t\tc语言成绩:");

         scanf("%lf",&p->c_program);

         caculate_score(p);

         C->total_number++;

         if(p->chinese_score>=60&&p->english_score>=60&&p->c_program>=60&&p->math_score>=60)

                            C->pass_number++;

}

 

void show(Student *S)//显示学生信息

{

         printf("%s\t%s\t%.1f\t%.1f\t%.1f",S->id_number,S->name,S->chinese_score,S->english_score,S->math_score);

         printf("\t%.1f\t%.1f\t%.1f\n",S->c_program,S->total_score,S->averge_score);

         printf("**********************************************************************\n");

}

 

int junge(char*a,char*b)          //判断姓名是否一致(按名字查找)

{

         char *p=a,*q=b;

         while(*p!='\0')

         {

                   if(*p==*q)

                   {

                            p++;

                            q++;

                           

                            continue;

                   }

                   else

                            break;

         }

         if(*p=='\0'&&*q=='\0')

                   return 1;

         else

                   return 0;

}

 

 

void delet_student(Class *C)//删除某学生信息

{

         char s[20];

         Student *t,*p=C->first_next;

         printf("请输入您想要删除的学生姓名:");

         scanf("%s",s);

         while(p)

         {

                   if(!p->next)

                   {

                            if(junge(p->name,s))

                            {

                                     C->first_next=NULL;

                                     printf("已成功删除%s同学的信息!\n",p->name);

                                     free(p);

                                     break;

                            }

                  

                   }

                   else

                   {

                            if(p)

                            {

                                     t=p->next;

                                     if(junge(p->next->name,s))

                                     {

                                               p->next=p->next->next;

                                               printf("已成功删除%s同学的信息!\n",p->next->name);

                                               free(t);

                                               break;

                                     }

                            }

                   }

 

                   p=p->next;

         }

         if(!p)

                   printf("\t\t没有找到该学生!\n");

         if(p->chinese_score>=60&&p->english_score>=60&&p->c_program>=60&&p->math_score>=60)

                            ;

         else

                   C->pass_number--;

}

 

/*void count_pass(Class *C)

{

         Student*p=C->first_next;

         while(p)

         {

                   if(p->chinese_score>=60&&p->english_score>=60&&p->c_program>=60&&p->math_score>=60)

                            C->pass_number++;

                   p=p->next;

         }

}*/

 

void id_sort(Class *C)//给某班上所有人排序

{

         Student *p=C->first_next,*t;

         Student *temp=(Student*)malloc(sizeof(Student));

         while(p)

         {

                  t=p->next;

                   while(t)

                   {

                            if(p->id_number>t->id_number)

                            {

                                     *temp=*p;

                                     *p=*t;

                                     *t=*temp;

                            }

                            t=t->next;

                   }

                   p=p->next;

         }

}

 

void show_one(Class *C)                            //查找并显示某学生信息

{

         Student *p=C->first_next;

         char s[20];

         printf("请输入您想要查找的学生姓名:");

         scanf("%s",s);

         while(p)

         {

                   if(junge(p->name,s))

                   {

                            printf("\t\t找到该人信息如下:\n学号\t姓名\t语文\t英语\t数学\tc语言\t总分\t平均分\n");

                            printf("**********************************************************************\n");

                            show(p);

                            break;

                   }

                   p=p->next;

         }

         if(!p)

                   printf("\t\t没有找到该学生!\n");

}

 

void show_all(Class *C)//显示某班所有人信息

{

         id_sort(C);

         Student *p=C->first_next;

         if(!p)

                   printf("\t\t该班级还未储存学生信息!\n");

         printf("学号\t姓名\t语文\t英语\t数学\tc语言\t总分\t平均分\n");

         printf("**********************************************************************\n");

         while(p)

         {

                   show(p);

                   p=p->next;

         }

}

 

void change_one(Class *C)//修改某人信息

{

         Student *p=C->first_next;

         int Operate3;

         char s[20];

         printf("请输入您想要更改信息的学生姓名:");

         scanf("%s",s);

         while(p)

         {

                   if(junge(p->name,s))

                   {

                            while(1)

                            {

                                     printf("请输入您想要更改的信息的相应指令:\n\t1姓名\t2学号\t3语文\t4英语\t 5数学\t6 c语言\t 0.完成\n");

                                     scanf("%d",&Operate3);

                                     switch(Operate3)

                                     {

                                     case 1:printf("姓名:");scanf("%s",p->name);break;

                                     case 2:printf("学号:");scanf("%s",p->id_number);break;

                                     case 3:printf("语文:");scanf("%lf",&p->chinese_score);break;

                                     case 4:printf("英语:");scanf("%lf",&p->english_score);break;

                                     case 5:printf("数学:");scanf("%lf",&p->math_score);break;

                                     case 6:printf("c语言:");scanf("%lf",&p->c_program);break;

                                     case 0:printf("\t\t已返回!\n");break;

                                     default:printf("\t\t输入错误,请重新输入!\n");

                                     }

                                     if(Operate3==0)

                                               break;

                            }

                  

                            break;

                   }

                   p=p->next;

         }

         if(!p)

                   printf("\t\t没有找到该学生!\n");

}

 

 

 

 

 

void Operate_student(Class *p)//对某班上同学的信息基本操作

{

         int Operate2;

         while(1)

         {       

                   printf("\t\t请输入指令:\n\t\t1添加学生信息\n\t\t2删除学生信息\n\t\t3查找并显示以为学生信息\n");

                   printf("\t\t4显示该班级所有学生信息\n\t\t5改变某学生信息\n\t\t0返回上一级菜单\n\t\t否者请从新输入\n请输入:");

                   scanf("%d",&Operate2);

                   printf("\n");

                   switch(Operate2)

                   {

                   case 1:input_student(p);break;//插入并按学号排序

                   case 2:delet_student(p);break;

                   case 3:show_one(p);break;

                   case 4:show_all(p);break;

                   case 5:change_one(p);break;

                   case 0:;break;

                   default:printf("\t\t输入错误!请重新输入!\n");

                   }

                  

                   if(Operate2==0)

                   {

                            printf("已返回上一级操作!\n");

                            break;

                   }

         }

}

 

 

 

//对班级的操作

 

 

 

void input_class(Term *T)//增加一个班级

{

        

         Class *p=(Class*)malloc(sizeof(Class));

         p->first_next=NULL;

         p->total_number=0;

         p->pass_number=0;

         printf("请输入班级号:");

         scanf("%s",p->class_name);

         p->cnext=T->first_class;

         T->first_class=p;

         Operate_student(p);

 

}

 

void delet_all(Class *C)//删除一个班的所有人的信息

{

         Student *t,*p=C->first_next;

         while(p)

         {

                   t=p;

                   p=p->next;

                   free(t);

         }

         if(!p)

                   printf("\t\t已成功删除该班级\n");

}

 

void delet_class(Term *T)//删除一个班级

{

         Class *p=T->first_class;

         if(!p)

         {        printf("您还未添加任何班级!\n");

                   return;

         }

         char s[20];

         printf("请输入班级名字:");

         scanf("%s",s);

         while(p)

         {

                   if(junge(p->class_name,s))

                   {

                            delet_all(p);

                            break;

                   }

                   p=p->cnext;

         }

 

}

 

void delet_all_class(Term*T)

{

         Class *p=T->first_class;

         while(p)

         {

                   delet_all(p);

                   p=p->cnext;

         }

         if(!p)

                   printf("\t\t删除该学期成功!\n");

}

 

void find_show_class(Term*T)//找到一个班级先显示所有人的信息再对其进行基本操作

{

         Class *p=T->first_class;

         if(!p)

                   printf("您还未添加任何班级!\n");

         char s[20];

         printf("请输入班级名字:");

         scanf("%s",s);

         while(p)

         {

                   if(junge(p->class_name,s))

                   {

                            id_sort(p);

                            show_all(p);

                            break;

                   }

                   p=p->cnext;

         }

         Operate_student(p);

}

 

void show_all_class_student(Term*T)//显示本学期的汇总成绩表单

{

         Class *p=T->first_class;

         if(!p)

         {

                   printf("您还未添加任何班级!\n");

                   return;

         }

         printf("\t\t这是%s的总成绩表单\n",T->term_number);

         while(p)

         {

                   printf("\t\t班级名:%s\t总人数:%d\t过关人数:%d\n",p->class_name,p->total_number,p->pass_number);

                   id_sort(p);

                   show_all(p);

                   p=p->cnext;

         }

}

 

void class_Operate(Term *p)//对班级的基本操作

{

         int Operate1;

         while(1)

         {

                   printf("\t\t请输入指令:\n\t\t1增加一个班级并进入到下一级菜单:\n\t\t2删除一个班级\n\t\t3查找某班级并显示所有学生信息\n\t\t4显示所有班级学生信息\n");

                   printf("\t\t0返回上级菜单\n\t\t其它:请从新输入:\n请输入:");

                   scanf("%d",&Operate1);

                   switch(Operate1)

                   {

                   case 1:input_class(p);       break;

                   case 2:delet_class(p);       break;

                   case 3:find_show_class(p);break;

                   case 4:show_all_class_student(p);break;

                   case 0:;break;

                   default:printf("\t\t输入错误!请重新输入!\n");

 

                   }

                   if(Operate1==0)

                   {

                            printf("已返回上一级操作!\n");

                            break;

                   }

         }

}

 

//对学期的操作

 

void input_term(Infor *I)//增加某一学期

{

 

         Term *p=(Term*)malloc(sizeof(Term));

         p->first_class=NULL;

         printf("请输入学期号:");

         scanf("%s",p->term_number);

         p->tnext=I->head;

         I->head=p;

         class_Operate(p);

        

}

void delet_term(Infor *I)//删除某一学期

{

         Term *p=I->head;

         if(!p)

         {

                   printf(" \t\t您还未向表单中添加任何资料!\n");

                   return;

         }

         while(p)

         {

                   delet_all_class(p);

                   p=p->tnext;

         }

}

 

void into_term(Infor*I)//查找进入操作某一学期的信息

{

         Term *p=I->head;

         char s[20];

         printf("请输入你要操作的学期名:");

         scanf("%s",s);

         while(p)

         {

                   if(junge(p->term_number,s))

                   {

                            class_Operate(p);

                            break;

                   }

                   p=p->tnext;

         }

         if(!p)

                   printf("\t\t抱歉!未找到该学期的相关信息!\n");

}

 

void show_all_information(Infor*I)//输出每一学期的所有信息

{

         Term*p=I->head;

         while(p)

         {

                   printf("\t\t如下是%s的学生信息!\n\n");

                   show_all_class_student(p);

                   p=p->tnext;

         }

}

 

void term_operate(Infor *I)//学期操作菜单

{

         int Operate;

         while(1)

         {

                   printf("\t\t1增加一个学期的表单\n\t\t2删除一个学期的表单\n\t\t3找到一个表单并进入其基本操作\n");

                   printf("\t\t4.显示所有学期的所有信息\n\t\t0已完成本系统操作,请退出\n\t\t其它:重新输入\n请输入:");

                   scanf("%d",&Operate);

                   switch(Operate)

                   {

                   case 1:input_term(I);break;

                   case 2:delet_term(I);break;

                   case 3:into_term(I);break;

                   case 4:show_all_information(I);break;

                   case 0:;break;

                   default:;

                   }

                   if(Operate==0)

                   {

                            int Sure;

                            printf("确定要退出本系统:(1表示是,其它输入表示否)\n请输入:");

                            scanf("%d",&Sure);

                            if(Sure==1)

                            {

                                     printf("\t\t您已已退出本系统!感谢您的使用!\n");

                                     break;

                            }

                   }

                  

         }

}

 

//main函数的操作

 

void main()

{

         //FILE *sp;

         //sp=freopen("in2.txt","r+",stdin);

         Infor I;

         init_head(&I);

         term_operate(&I);

         //fclose(sp);

}

 

 

/******************************************************************************

编程心得:这次犯了个错误,次级链表的初始化忘了,导致耽搁了鄙人2~3个小时是在是不应该啊!

最后还忘了加控制变量的取地址符,更不应该啊!

 

                                                                 --------------2013年6月25日作

*********************************************************************************/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值