亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

C語言學生成績管理系統小設計

2020-01-26 13:48:39
字體:
來源:轉載
供稿:網友

本文實例為大家分享了C語言學生成績管理系統的具體代碼,供大家參考,具體內容如下

一、本設計涉及的重要C語言知識有:

1.單鏈表的各種操作
2.文件流的操作
3.單鏈表的排序

二、本設計主要以下幾個模塊組成

1.學生成績添加模塊

2.學生成績刪除模塊

3.學生成績修改模塊

4.學生成績檢索模塊

5.學生成績顯示模塊(包括成績排序)

6.學生成績保存模塊

效果圖:

本設計大概5、6百行代碼左右,通過這個設計,本人感覺C語言熟練了很多,

希望能對像我一樣的C語言菜鳥同學會有點幫助,廢話少說,咱們上代碼!

三、程序代碼

1.main.c

這個文件內主要完成主菜單的跳轉和接受用戶信息完成到各個模塊的跳轉。

#include <stdio.h> #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 <stdio.h> #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->ID<s->next->ID)      s=q;        if(flag == '2')     if(q->next->chinese<s->next->chinese)      s=q;          if(flag == '3')     if(q->next->math<s->next->math)      s=q;          if(flag == '4')     if(q->next->english<s->next->english)      s=q;          if(flag == '5')     if(q->next->average<s->next->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 <stdlib.h> #include <stdio.h>  #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語言基礎部分到此告一段落了,通過這段時間的修煉對C語言有了更加深入的理解,
能夠熟練運用指針、數組、結構體和鏈表進行代碼的編寫了。
如果以后有時間,可能會修煉一下C算法,下一段時間我會修煉C++。
希望能對像我一樣的C語言菜鳥能提供到幫助,大家共同努力,共同奮斗!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品久久久亚洲| 91手机视频在线观看| 欧美高清第一页| 久久亚洲国产精品| 日韩亚洲第一页| 亚洲最新在线视频| 91麻豆国产语对白在线观看| 欧美日韩国产色视频| 精品视频在线播放| 亚洲日本欧美日韩高观看| 日日狠狠久久偷偷四色综合免费| 国产91av在线| 岛国精品视频在线播放| 国产精品视频在线观看| 精品欧美一区二区三区| 欧美性猛交xxxx乱大交| 91成人在线观看国产| 欧美富婆性猛交| 亚洲福利视频专区| 欧美性videos高清精品| 日韩av123| 色爱av美腿丝袜综合粉嫩av| 国产99久久精品一区二区永久免费| 欧美福利视频在线| 久久综合国产精品台湾中文娱乐网| 亚洲人成网站777色婷婷| 久久久久国产精品免费| 国产成人一区二区三区电影| 国产精品久久77777| 91国产美女在线观看| 日韩在线不卡视频| 91精品久久久久久久久久入口| 国产精品精品视频一区二区三区| 亚洲理论电影网| 日韩国产高清视频在线| 国模视频一区二区| 欧美激情亚洲综合一区| 91精品在线影院| 欧美成人一区在线| 91av视频导航| 亚洲一区美女视频在线观看免费| 青青久久av北条麻妃黑人| 欧美大片在线看| 国产成人极品视频| 俺去亚洲欧洲欧美日韩| 精品二区三区线观看| 国产精品福利网站| 国产在线久久久| 久久精品青青大伊人av| 欧美黑人性生活视频| 国产在线观看精品一区二区三区| 日韩欧美aⅴ综合网站发布| 欧美日韩在线观看视频小说| 不用播放器成人网| 亚洲一区二区国产| www.亚洲一区| 日韩大片在线观看视频| 国产在线999| 久久天天躁狠狠躁夜夜躁| 欧美在线视频一区二区| 国产成人在线亚洲欧美| 亚洲人成在线免费观看| 国产精品热视频| 国产999精品视频| 欧美午夜精品伦理| 在线亚洲国产精品网| 国产精品视频成人| 日韩av最新在线| 日韩av在线最新| 亚洲国产精久久久久久久| 国产成人精彩在线视频九色| 欧美激情一区二区三级高清视频| 亚洲视频999| 国产免费一区视频观看免费| 日韩第一页在线| 成人欧美在线观看| 91美女片黄在线观看游戏| 久久久中精品2020中文| 欧美一区二区三区艳史| 国产精品三级美女白浆呻吟| 亚洲视频网站在线观看| 亚洲缚视频在线观看| 久久精品久久精品亚洲人| 久久久免费在线观看| 日韩av三级在线观看| 欧美一级电影久久| 欧美猛少妇色xxxxx| 欧美在线性爱视频| 最近更新的2019中文字幕| 欧美激情区在线播放| 亚洲第一精品夜夜躁人人爽| 国产亚洲精品一区二区| 国产精品99蜜臀久久不卡二区| 久久久亚洲国产| 亚洲精品国产拍免费91在线| 欧美午夜精品久久久久久久| 久操成人在线视频| 一本大道香蕉久在线播放29| 国产成人精品免高潮费视频| 国产视频在线观看一区二区| 美女啪啪无遮挡免费久久网站| 国产中文欧美精品| 中文字幕在线看视频国产欧美| 永久555www成人免费| 欧美在线激情网| 久久视频免费在线播放| 日韩a**中文字幕| 国产精品入口福利| 亚洲精品wwww| 亚洲欧洲一区二区三区久久| 亚洲人成在线免费观看| 国产精品一二区| 久久久久久久影视| 亚洲人成人99网站| 欧美大片大片在线播放| 亚洲电影在线看| 狠狠躁夜夜躁人人躁婷婷91| 欧美精品一区二区免费| 欧美日韩激情视频8区| 日韩免费av片在线观看| 97人人爽人人喊人人模波多| 国产97免费视| 久久婷婷国产麻豆91天堂| 久久精品在线视频| 日韩av电影中文字幕| 欧美亚洲视频在线看网址| 国产精品久久久久7777婷婷| 亚洲欧美日韩中文在线制服| 琪琪亚洲精品午夜在线| 国产精品久久久久久久电影| 亚洲女人初尝黑人巨大| 91高清视频在线免费观看| 亚洲japanese制服美女| 欧美亚洲成人xxx| 亚洲欧美中文另类| 一区二区三区天堂av| 欧美日本在线视频中文字字幕| 亚洲成年人在线播放| 国产激情综合五月久久| 中文字幕日韩在线观看| 欧美激情久久久| 久久久精品网站| 视频一区视频二区国产精品| 中文字幕在线日韩| 日韩美女视频在线观看| 欧美日韩午夜视频在线观看| 国产精品中文字幕在线观看| 国产成人一区二| 国产成人精品久久二区二区| 亚洲色图13p| 国产精品pans私拍| 亚洲精品久久久久久久久久久久| 国产成人一区二区三区电影| 国产精品久在线观看| 欧美另类极品videosbest最新版本| 亚洲自拍小视频免费观看| 在线成人中文字幕| 欧美激情一区二区三级高清视频| www.国产一区| 亚洲999一在线观看www| 国产精品国产福利国产秒拍| 久久福利视频导航| 成人天堂噜噜噜| 色婷婷综合成人|