您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么用C語言模擬實現學生學籍管理系統”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“怎么用C語言模擬實現學生學籍管理系統”文章能幫助大家解決問題。
學生學籍管理系統的C語言模擬實現是對鏈表、指針、結構體、文件操作等知識點的綜合運用,需要實現的功能主要包含:輸入學生信息、顯示學生信息、查詢學生信息、新增學生信息、刪除學生信息、修改學生信息、對學生信息排序、保存當前信息到文件、文件備份、文件加載等。
代碼實現如下
#include <stdio.h> #include <malloc.h> #include <string.h> #include <stdlib.h> #include<conio.h> #include <MEMORY.H> typedef struct node { int num; char name[20]; float score[3]; float ave; struct node *next; }STU; STU *Create(); void output(STU *head); void find(STU *head); STU *findByNum(STU *head,int num); STU *findByName(STU *head,char name); STU *findByNumEx(STU *head,int num,STU **ppbefore); STU *del(STU* head); STU *insert(STU *head); void update(STU *head); void sort(STU *head); void save_info(STU *head); STU *load_info(); void copy(); void main() { STU *head; int choice; head=NULL; for(;;) { system("cls"); printf(" \t\t******學生成績管理系統*********\n"); printf(" \t\t* 1.輸入學生信息 *\n"); printf(" \t\t* 2.顯示全部學生信息 *\n"); printf(" \t\t* 3.查詢學生信息 *\n"); printf(" \t\t* 4.新增學生信息 *\n"); printf(" \t\t* 5.刪除學生信息 *\n"); printf(" \t\t* 6.修改學生信息 *\n"); printf(" \t\t* 7.對學生信息排序 *\n"); printf(" \t\t* 8.保存當前信息到文件 *\n"); printf(" \t\t* 9.備份 *\n"); printf(" \t\t* 10.從文件加載學生信息 *\n"); printf(" \t\t* 0.退出系統 *\n"); printf(" \t\t*******************************\n"); printf("請選擇(0-9) :"); scanf("%d",&choice); if(choice==0) break; switch(choice) { case 1: head=Create();break; case 2: output(head);break; case 3: find(head);break; case 4: head=insert(head); break; case 5: head=del(head); break; case 6: update(head);break; case 7: sort(head);break; case 8: save_info(head);break; case 9: copy();break; case 10:head=load_info();break; } printf("按任意鍵繼續...."); getch(); } printf("感謝您的使用,再見!\n"); } STU *Create() { STU *head,*pnew,*pend; head=NULL; printf("輸入學生信息(按0結束輸入):\n學號\t姓名\t數學\t英語\t語文\n"); for(;;) { pnew=(STU *)malloc(sizeof(STU)); scanf("%d",&pnew->num); if(pnew->num==0) { printf("輸入完成!---> "); break; } scanf("%s%f%f%f",pnew->name,&pnew->score[0],&pnew->score[1],&pnew->score[2]); pnew->ave=(pnew->score[0]+pnew->score[1]+pnew->score[2])/3; pnew->next=NULL; if(head==NULL) { head=pnew; pend=pnew; } else { pend->next=pnew; pend=pend->next; } } return head; } void output(STU *head) { STU *p; printf("全部學生信息如下:\n學號\t姓名\t數學\t英語\t語文\t平均分\n"); for(p=head;p!=NULL;p=p->next) printf("%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",p->num,p->name,p->score[0],p->score[1],p->score[2],p->ave); } void find(STU *head) { STU *presult; int num; char name[20]; int choice; printf("查找學生信息\n"); printf("請選擇查找方式:1,按學號;2,按姓名\n"); printf("choice="); scanf("%d",&choice); if(choice==1) { printf("請輸入學號:"); scanf("%d",&num); presult=findByNum(head,num); } else { printf("請輸入姓名\n"); scanf("%s",name); presult=findByName(head,name); } if(presult!=NULL) { printf("找到了,該生信息如下:\n學號\t姓名\t數學\t英語\t語文\t平均分\n"); printf("%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",presult->num,presult->name,presult->score[0],presult->score[1],presult->score[2],presult->ave); } else printf("查無此人!\a\n"); } STU *findByNum(STU *head,int num) { STU *p,*presult=NULL; for(p=head;p!=NULL;p=p->next) if(p->num==num) { presult=p; break; } return presult; } STU *findByName(STU *head,char *name) { STU *p,*presult=NULL; for(p=head;p!=NULL;p=p->next) if(strcmp(p->name,name)==0) { presult=p; break; } return presult; } //函數說明: // 在head所指向鏈表中,查找學號為num的節點 // 找到后,返回兩個值:指向當前節點的指針presult,指向當前節點的前一節點的指針pbefore, // presult通過函數返回值返回(即return),pbefore通過輸出型參數ppBefore返回 STU *findByNumEx(STU *head,int num,STU **ppbefore) { STU *p,*presult=NULL,*pbefore=NULL; for(p=head;p!=NULL;pbefore=p,p=p->next) if(p->num==num) { presult=p; break; } if(p==NULL) pbefore=NULL; *ppbefore=pbefore; return presult; } STU *del(STU *head) { STU *presult,*pbefore; int num; printf("要刪除的學號:"); scanf("%d",&num); presult=findByNumEx(head,num,&pbefore); if(presult!=NULL) { printf("找到了,該生信息如下:\n學號\t姓名\t數學\t英語\t語文\t平均分\n"); printf("%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",presult->num,presult->name,presult->score[0],presult->score[1],presult->score[2],presult->ave); if(presult==head) { head=presult->next; } else { pbefore->next=presult->next; } printf("刪除成功---> "); } else printf("無與此學生相關的信息\a\a\n"); return head; } STU *insert(STU *head) { STU *pnew,*pcur,*pbefore,*p; int choice; printf("輸入新生信息:\n"); for(;;) { pnew=(STU *)malloc(sizeof(STU)); printf("學號\t姓名\t數學\t英語\t語文\n"); scanf("%d%s%f%f%f",&pnew->num,pnew->name,&pnew->score[0],&pnew->score[1],&pnew->score[2]); pnew->ave=(pnew->score[0]+pnew->score[1]+pnew->score[2])/3; pnew->next=NULL; if(head==NULL) { head=pnew; } else { pcur=NULL; for(p=head;p!=NULL;pbefore=p,p=p->next) if(p->num > pnew->num) { pcur=p; break; } if(pcur==NULL) { pbefore->next=pnew; } else { if(pcur==head) { pnew->next=pcur; head=pnew; } else { pnew->next=pcur; pbefore->next=pnew; } } } printf("請選擇:按1繼續添加->按0結束添加\n"); printf("choice="); scanf("%d",&choice); if(choice==0) { printf("信息添加完畢!\n"); break; } } return head; } void update(STU *head) { STU *presult; int num; printf("輸入要修改學生的學號\n"); scanf("%d",&num); presult=findByNum(head,num); if(presult==NULL) printf("查無此人!無法修改!\a\n"); else { printf("找到了,該生信息如下:\n學號\t姓名\t數學\t英語\t語文\t平均分\n"); printf("%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",presult->num,presult->name,presult->score[0],presult->score[1],presult->score[2],presult->ave); printf("輸入修改信息\n"); printf("學號\t姓名\t數學\t英語\t語文\n"); scanf("%d%s%f%f%f",&presult->num,&presult->name,&presult->score[0],&presult->score[1],&presult->score[2]); presult->ave=(presult->score[0]+presult->score[1]+presult->score[2])/3; printf("修改完畢---> "); } } void sort(STU *head) { STU *pi,*pj,*pindex,*p; STU temp; int len=sizeof(STU)-sizeof(STU *); int i,j,n=0; for(p=head;p!=NULL;p=p->next) n++; for(pi=head,i=0;i<n-1;i++,pi=pi->next){ pindex=pi; for(pj=pi->next,j=i+1;j<n;j++,pj=pj->next) if(pindex->num> pj->num) pindex=pj; memcpy(&temp,pi,len); memcpy(pi,pindex,len); memcpy(pindex,&temp,len); } printf("排序完畢---> "); } void save_info(STU *head) { char filename[40]; FILE *fp; STU *p; printf("現在進入保存當前信息到文件的處理\n"); printf("請輸入文件名:"); scanf("%s",filename); if((fp=fopen(filename,"w"))==NULL) { printf("無法打開文件\n"); return; } fprintf(fp,"全部學生信息如下:\n學號\t姓名\t數學\t英語\t語文\t平均分\n"); for(p=head;p!=NULL;p=p->next) fprintf(fp,"%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",p->num,p->name,p->score[0],p->score[1],p->score[2],p->ave); fprintf(fp,"%d",0); fclose(fp); printf("保存完成!--->"); } STU *load_info() { STU *head=NULL,*pnew,*pend; char filename[40]; FILE *fp; int i; printf("現在進行從文件加載的處理,輸入文件名:"); scanf("%s",filename); if((fp=fopen(filename,"r"))==NULL){ printf("加載失敗!"); exit(0); } for(i=0;i<7;i++) fscanf(fp,"%s",filename); for(;;) { pnew=(STU *)malloc(sizeof(STU)); fscanf(fp,"%d",&pnew->num); if(pnew->num==0) break; fscanf(fp,"%s%f%f%f%f",&pnew->name,&pnew->score[0],&pnew->score[1],&pnew->score[2],&pnew->ave); pnew->next=NULL; if(head==NULL) { head=pnew; pend=pnew; } else { pend->next=pnew; pend=pnew; } } fclose(fp); printf("加載成功!\n"); return head; } void copy() { FILE *in,*out; char infile[40]; char outfile[40]; printf("現在進入學生信息文件的備份\n"); printf("源文件名:"); scanf("%s",infile); printf("備份文件名:"); scanf("%s",outfile); if((in=fopen(infile,"r"))==NULL) { printf("文件無法打開\n"); exit(0); } if((out=fopen(outfile,"w"))==NULL){ printf("文件無法打開\n"); exit(0); } while(!feof(in)) fputc(fgetc(in),out); fclose(in); fclose(out); }
程序運行效果圖:
關于“怎么用C語言模擬實現學生學籍管理系統”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。