189 8069 5689

C语言学生成绩管理系统的示例分析-创新互联

小编给大家分享一下C语言学生成绩管理系统的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

我们一直强调成都网站制作、成都网站建设、外贸营销网站建设对于企业的重要性,如果您也觉得重要,那么就需要我们慎重对待,选择一个安全靠谱的网站建设公司,企业网站我们建议是要么不做,要么就做好,让网站能真正成为企业发展过程中的有力推手。专业网站制作公司不一定是大公司,创新互联作为专业的网络公司选择我们就是放心。

具体内容如下

一、本设计涉及的重要C语言知识有:

1.单链表的各种操作
2.文件流的操作
3.单链表的排序

二、本设计主要以下几个模块组成

1.学生成绩添加模块

2.学生成绩删除模块

3.学生成绩修改模块

4.学生成绩检索模块

5.学生成绩显示模块(包括成绩排序)

6.学生成绩保存模块

效果图:

C语言学生成绩管理系统的示例分析

C语言学生成绩管理系统的示例分析

本设计大概5、6百行代码左右,通过这个设计,本人感觉C语言熟练了很多,

希望能对像我一样的C语言菜鸟同学会有点帮助,废话少说,咱们上代码!

三、程序代码

1.main.c

这个文件内主要完成主菜单的跳转和接受用户信息完成到各个模块的跳转。

#include  
#include "students.h" 
 
int select_menu(void); 
void hand_menu(int cmd, int *flag); 
void quit(); 
 
 
  
int main(int argc, char *argv[]) 
{ 
 int cmd; 
 int flag = 0; 
  
 while(1){ 
  cmd = select_menu();   
  hand_menu(cmd, &flag); 
 } 
} 
 
int select_menu(void) 
{ 
 int select = 0; 
 printf("**************************************************************\n\n"); 
 printf("   学生管理系统    \n"); 
 printf(" 1:添加学生信息   2:删除学生信息\n"); 
 printf(" 3:修改学生信息   4:查询学生信息\n"); 
 printf(" 5:查看学生信息   6:保存\n"); 
 printf(" 0:退出\n\n"); 
 printf("**************************************************************\n"); 
 printf("请选择:"); 
  
 select=getch(); 
 while(select<'0'||select>'6'){ 
  printf("\n输入错误,请重新选择:"); 
  select=getch(); 
 } 
 return select; 
} 
 
void hand_menu(int cmd, int *flag) 
{ 
 static STU *stu_head = NULL; 
 if(*flag == 0){ 
  stu_head = init_student(stu_head); 
  *flag = 1; 
 } 
  
 switch(cmd){ 
  case '0': 
   save_student(stu_head); 
   quit(); 
   break; 
  case '1': 
   system("cls"); 
   stu_head = add_student(stu_head); 
   system("cls"); 
   break; 
  case '2': 
   system("cls"); 
   stu_head = del_student(stu_head); 
   system("cls"); 
   break; 
  case '3': 
   system("cls"); 
   modify_student(stu_head); 
   system("cls"); 
   break; 
  case '4': 
   system("cls"); 
   search_student(stu_head); 
   system("cls"); 
   break; 
  case '5': 
   system("cls"); 
   stu_head = display_student(stu_head); 
   system("cls"); 
   break; 
  case '6': 
   system("cls"); 
   save_student(stu_head); 
   system("cls"); 
   break; 
  default: 
   break; 
 } 
} 
 
void quit() 
{ 
 printf("\n感谢使用学生管理系统!\n"); 
 exit(0); 
}

2.students.h

这个文件主要包含students.c文件函数操作所需的定义。

#ifndef _STUDENTS_H_ 
#define _STUDENTS_H_ 
 
typedef struct st{ 
 unsigned long ID; 
 char name[10]; 
 float chinese; 
 float math; 
 float english; 
 double all_sub; 
 float average; 
 struct st* next; 
}STU; 
 
#define ASK_STU(p) do{p=(STU *)malloc(sizeof(STU));\ 
    if(p==NULL){printf("malloc memory failed!\n");exit(1);}\ 
    }while(0) 
     
STU *search_by_nb(STU *stu_head, unsigned long nb); 
STU *search_by_name(STU *stu_head, char name[]); 
STU *select_sort(STU *g, char flag); 
STU *add_student(STU *stu_head); 
STU *del_all(STU *stu_head); 
STU *del_one(STU *stu_head, int flag); 
STU *del_student(STU *stu_head); 
void modify_student(STU *stu_head); 
STU *display_student(STU *stu_head); 
STU *search_by_name(STU *stu_head, char name[]); 
STU *search_by_nb(STU *stu_head, unsigned long nb); 
#endif

3.store.h

#ifndef _STORE_H_ 
#define _STORE_H_ 
void save_student(STU *stu_head); 
STU *init_student(STU *stu_head); 
#endif

4.students.c

这个文件是本设计的核心部分,包括各个模块的实现函数,
包括添加,删除,修改,查找,显示学生信息这几个模块的实现。

#include  
#include "students.h" 
 
 STU *select_sort(STU *g, char flag) 
 { 
 STU *p,*q,*t,*s,*h; 
 
 h=(STU *)malloc(sizeof(STU)); 
 h->next=g; 
 p=h; 
 while(p->next->next!=NULL) 
 { 
  for(s=p,q=p->next;q->next!=NULL;q=q->next) 
  { 
   if(flag == '1') 
    if(q->next->IDnext->ID) 
     s=q; 
    
   if(flag == '2') 
    if(q->next->chinesenext->chinese) 
     s=q; 
      
   if(flag == '3') 
    if(q->next->mathnext->math) 
     s=q; 
      
   if(flag == '4') 
    if(q->next->englishnext->english) 
     s=q; 
      
   if(flag == '5') 
    if(q->next->averagenext->average) 
     s=q; 
  } 
 
  if(s!=q) 
  { 
   t=s->next; 
   s->next=t->next; 
   t->next=p->next; 
   p->next=t; 
  } 
  p=p->next; 
 } 
 g=h->next; 
 free(h); 
 return g; 
} 
 
STU *add_student(STU *stu_head) 
{  
 STU *stu; 
 STU *head = stu_head; 
 STU *node = stu_head; 
 STU *node_fd; 
 int sel; 
 
 ASK_STU(stu); 
 stu->next = NULL; 
  
 printf("请输入学生学号:"); 
 scanf("%d", &stu->ID);  
 
 while(search_by_nb(node, stu->ID)){ 
  printf("已经存在该学号!请重新输入一个学号:"); 
  scanf("%d", &stu->ID); 
 } 
  
 printf("请输入学生名字:"); 
 scanf("%s", stu->name); 
 printf("请输入该学生英语成绩:"); 
  
 scanf("%f", &stu->english); 
 while(stu->english < 0.0 || stu->english > 100.0){ 
  printf("输入错误,请重新输入英语成绩:"); 
  scanf("%f", &stu->english); 
 } 
 printf("请输入该学生数学成绩:"); 
 scanf("%f", &stu->math); 
 while(stu->math < 0.0 || stu->math > 100.0){ 
  printf("输入错误,请重新输入数学成绩:"); 
  scanf("%f", &stu->math); 
 } 
 printf("请输入该学生语文成绩:"); 
 scanf("%f", &stu->chinese); 
 while(stu->chinese < 0.0 || stu->chinese > 100.0){ 
  printf("输入错误,请重新输入数学成绩:"); 
  scanf("%f", &stu->chinese); 
 } 
  
 stu->all_sub = stu->chinese+stu->math+stu->english; 
 stu->average = stu->all_sub/3; 
  
 if(!head){ 
  head = stu; 
  return head; 
 } 
 
 while(node->next) 
  node = node->next; 
   
 node->next = stu; 
 head = select_sort(head, '1'); 
 return head;  
} 
STU *del_all(STU *stu_head) 
{ 
 if(!stu_head) 
  return NULL; 
 del_all(stu_head->next); 
 free(stu_head); 
 stu_head = NULL; 
 return NULL; 
} 
 
STU *del_one(STU *stu_head, int flag) 
{ 
 STU *node = stu_head; 
 STU *head = stu_head; 
 STU *pre; 
  
 char name[10]; 
 unsigned long ID; 
  
 if(head = NULL){ 
  printf("没有任何学生信息!\n"); 
  return head; 
 } 
  
 if(flag == '2'){ 
  printf("请输入要删除的学生姓名:"); 
  scanf("%s", name); 
   
  if(!strcmp(node->name, name)){ 
   free(node); 
   head = node->next; 
   printf("成功删除!按任意键返回。\n"); 
   getch(); 
   return head; 
  } 
   
  while(node){ 
   if(!strcmp(node->name, name)){ 
    pre->next = node->next; 
    free(node); 
    printf("成功删除!按任意键返回。\n"); 
    getch(); 
    return head; 
   } 
   pre = node; 
   node = node->next; 
  } 
   
  printf("没有找到该学生信息!\n"); 
  return head; 
 } 
  
 if(flag == '3'){ 
  printf("请输入要删除的学生学号:"); 
  scanf("%d", &ID); 
   
  if(node->ID == ID){ 
   free(node); 
   head = node->next; 
   printf("成功删除!按任意键返回。\n"); 
   getch(); 
   return head; 
  } 
   
  while(node){ 
   if(!strcmp(node->name, name)){ 
    pre->next = node->next; 
    free(node); 
    printf("成功删除!按任意键返回。\n"); 
    getch(); 
    return head; 
   } 
   pre = node; 
   node = node->next; 
  } 
   
  printf("没有找到该学生信息!按任意键返回\n"); 
  getch(); 
  return head; 
 } 
  
} 
 
STU *del_student(STU *stu_head) 
{ 
 int sel; 
 STU *head = stu_head; 
  
 printf("1:删除全部 2:按名字删除 3:按学号删除 0:返回\n"); 
 printf("请选择:\n"); 
  
 sel = getch(); 
 while(sel<'0'||sel>'3'){ 
  printf("输入错误,请重新选择:\n"); 
  sel = getch(); 
 } 
  
 if(sel == '0') 
  return head; 
  
 if(!head){ 
  printf("没有任何学生信息!按任意键返回.\n"); 
  getch(); 
  return head; 
 } 
  
  if(sel == '1'){ 
  head = del_all(head); 
  printf("删除成功!按任意键返回."); 
  getch(); 
  return head; 
 } 
  
 if(sel == '2'||sel =='3'){ 
  head = del_one(head, sel); 
  return head; 
 } 
  
} 
 
void modify_student(STU *stu_head) 
{ 
 STU *head = stu_head; 
 STU *node_fd; 
 int sel; 
 char name[10]; 
 unsigned long nb; 
  
recyc3: 
 printf("1:修改指定学号的学生信息 2:修改指定姓名的学生信息 0:返回\n请选择:\n"); 
  
 sel = getch(); 
 while(sel < '0'|| sel>'2'){ 
  printf("输入错误!请重新选择:\n"); 
  sel = getch(); 
 } 
 if(sel == '1'||sel=='2'){ 
  if(sel == '1'){ 
   printf("请输入要修改的学生学号:"); 
   scanf("%d", &nb);  
   node_fd = search_by_nb(head, nb); 
  } 
  if(sel == '2'){ 
   printf("请输入要修改的学生姓名:"); 
   scanf("%s", name); 
   node_fd = search_by_name(head, name); 
  } 
  
  if(node_fd){ 
    
   printf("请输入该学生英语成绩:"); 
   scanf("%f", &node_fd->english); 
   while(node_fd->english < 0.0 || node_fd->english > 100.0){ 
    printf("输入错误,请重新输入英语成绩:"); 
    scanf("%f", &node_fd->english); 
   } 
   printf("请输入该学生数学成绩:"); 
   scanf("%f", &node_fd->math); 
   while(node_fd->math < 0.0 || node_fd->math > 100.0){ 
    printf("输入错误,请重新输入数学成绩:"); 
    scanf("%f", &node_fd->math); 
   } 
   printf("请输入该学生语文成绩:"); 
   scanf("%f", &node_fd->chinese); 
   while(node_fd->chinese < 0.0 || node_fd->chinese > 100.0){ 
   printf("输入错误,请重新输入数学成绩:"); 
   scanf("%f", &node_fd->chinese); 
   } 
  
   node_fd->all_sub = node_fd->chinese+node_fd->math+node_fd->english; 
   node_fd->average = node_fd->all_sub/3; 
   printf("修改成功!\n"); 
   goto recyc3; 
  } 
  else{ 
   printf("没有该学生信息!\n"); 
   goto recyc3; 
  } 
 } 
} 
 
STU *display_student(STU *stu_head) 
{ 
 int sel; 
 STU *head = stu_head; 
 STU *node = stu_head; 
 if(node == NULL){ 
  printf("没有任何学生信息,按任意键返回"); 
  getch(); 
  return head; 
 } 
recyc: 
 printf("学号  姓名  语文 数学 英文 平均分 总分\n"); 
 while(node){ 
  printf("%d  %s  %0.1f %0.1f %0.1f %0.1f %0.1f\n", node->ID, node->name,\ 
   node->chinese, node->math, node->english, node->average, node->all_sub); 
  node=node->next; 
 } 
 printf("排序方式: 1:按学号排序 2:按语文成绩排序 3:按数学成绩排序\n   4:按英文成绩排序 5:按总分排序 0:返回\n请选择:"); 
 
 sel = getch(); 
 while(sel < '0'|| sel>'5'){ 
  printf("输入错误!请重新选择:"); 
  sel = getch(); 
 } 
 if(sel == '0') 
  return head; 
   
 head = node = select_sort(head, sel); 
 system("cls"); 
 goto recyc; 
 return head; 
} 
 
STU *search_by_name(STU *stu_head, char name[]) 
{ 
 STU *node = stu_head; 
 
 if(!node) 
  return NULL; 
 
    
 while(node){ 
  if(!strcmp(node->name, name)) 
    return node; 
   node=node->next; 
 } 
   
 return NULL; 
} 
 
STU *search_by_nb(STU *stu_head, unsigned long nb) 
{ 
 STU *node = stu_head; 
 
 if(!node) 
  return NULL; 
   
    
 while(node){ 
  if(node->ID == nb) 
   return node; 
    
  node=node->next; 
 } 
   
 return NULL; 
} 
 
void search_student(STU *stu_head) 
{ 
 STU *head = stu_head; 
 STU *node; 
 int sel = 0; 
 char name[10]; 
 unsigned long ID; 
  
recyc2: 
 printf("1:按姓名查找 2:按学号查找 0:返回\n请选择:"); 
 sel = getch(); 
 while(sel<'0' || sel>'2'){ 
  printf("\n输入错误,请重新选择:"); 
  sel = getch(); 
 } 
  
 if(sel == '0') 
  return; 
 if(sel == '1'||sel=='2'){ 
  if(sel == '1'){ 
   printf("\n请输入你要查找的学生姓名:"); 
   scanf("%s", name); 
   node = search_by_name(head, name); 
  } 
  else{ 
   printf("\n请输入你要查找的学生学号:"); 
   scanf("%d", &ID); 
   node = search_by_nb(head, ID); 
  } 
  
  if(node){ 
   printf("学号  姓名  语文 数学 英文 平均分 总分\n"); 
   printf("%d  %s  %0.1f %0.1f %0.1f %0.1f %0.1f\n", node->ID, node->name,\ 
     node->chinese, node->math, node->english, node->average, node->all_sub); 
    goto recyc2; 
  } 
  else{ 
   printf("没有找到该学生信息!\n"); 
   goto recyc2; 
  } 
 } 
 
}

5.store.c

这个文件包含程序启动时读取文件内的学生成绩信息,
和需要保存时或者退出时向文件保存学生成绩信息的操作。

#include  
#include  
 
#include "students.h" 
 
#define FILE_NAME "students" 
 
void save_student(STU *stu_head) 
{ 
 STU *node = stu_head; 
 FILE *fp; 
 fp = fopen(FILE_NAME, "w+"); 
 while(node){ 
  fprintf(fp, "%ld %s %0.1f %0.1f %0.1f %0.1lf %0.1f\n", node->ID, node->name,\ 
    node->chinese, node->math, node->english, node->all_sub, node->average); 
  node=node->next; 
 } 
 fclose(fp); 
 printf("保存成功!按任意键返回。\n"); 
 getch(); 
} 
 
STU *init_student(STU *stu_head) 
{ 
 STU *node = stu_head; 
 STU *head = stu_head; 
 STU *new_node; 
 int i; 
 FILE *fp; 
 char name[10]; 
 int num; 
  
 ASK_STU(new_node); 
 new_node->next=NULL; 
  
 fp = fopen(FILE_NAME, "r+"); 
 rewind(fp); 
 while((i = fscanf(fp, "%ld%s%f%f%f%lf%f\n", &new_node->ID, new_node->name,\ 
     &new_node->chinese, &new_node->math, &new_node->english, &new_node->all_sub, &new_node->average)) == 7){ 
  if(!head) 
   head = node = new_node; 
  else{ 
   while(node->next) 
    node = node->next; 
   node->next = new_node; 
  } 
  ASK_STU(new_node); 
  new_node->next = NULL; 
 } 
 fclose(fp); 
 return head; 
}

以上是“C语言学生成绩管理系统的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联网站建设公司行业资讯频道!

另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


本文标题:C语言学生成绩管理系统的示例分析-创新互联
标题链接:http://cdxtjz.com/article/iicej.html

其他资讯