您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么用C語(yǔ)言模擬實(shí)現(xiàn)學(xué)生學(xué)籍管理系統(tǒng)”的相關(guān)知識(shí),小編通過(guò)實(shí)際案例向大家展示操作過(guò)程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“怎么用C語(yǔ)言模擬實(shí)現(xiàn)學(xué)生學(xué)籍管理系統(tǒng)”文章能幫助大家解決問(wèn)題。
學(xué)生學(xué)籍管理系統(tǒng)的C語(yǔ)言模擬實(shí)現(xiàn)是對(duì)鏈表、指針、結(jié)構(gòu)體、文件操作等知識(shí)點(diǎn)的綜合運(yùn)用,需要實(shí)現(xiàn)的功能主要包含:輸入學(xué)生信息、顯示學(xué)生信息、查詢學(xué)生信息、新增學(xué)生信息、刪除學(xué)生信息、修改學(xué)生信息、對(duì)學(xué)生信息排序、保存當(dāng)前信息到文件、文件備份、文件加載等。
代碼實(shí)現(xiàn)如下
#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******學(xué)生成績(jī)管理系統(tǒng)*********\n"); printf(" \t\t* 1.輸入學(xué)生信息 *\n"); printf(" \t\t* 2.顯示全部學(xué)生信息 *\n"); printf(" \t\t* 3.查詢學(xué)生信息 *\n"); printf(" \t\t* 4.新增學(xué)生信息 *\n"); printf(" \t\t* 5.刪除學(xué)生信息 *\n"); printf(" \t\t* 6.修改學(xué)生信息 *\n"); printf(" \t\t* 7.對(duì)學(xué)生信息排序 *\n"); printf(" \t\t* 8.保存當(dāng)前信息到文件 *\n"); printf(" \t\t* 9.備份 *\n"); printf(" \t\t* 10.從文件加載學(xué)生信息 *\n"); printf(" \t\t* 0.退出系統(tǒng) *\n"); printf(" \t\t*******************************\n"); printf("請(qǐng)選擇(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("按任意鍵繼續(xù)...."); getch(); } printf("感謝您的使用,再見(jiàn)!\n"); } STU *Create() { STU *head,*pnew,*pend; head=NULL; printf("輸入學(xué)生信息(按0結(jié)束輸入):\n學(xué)號(hào)\t姓名\t數(shù)學(xué)\t英語(yǔ)\t語(yǔ)文\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("全部學(xué)生信息如下:\n學(xué)號(hào)\t姓名\t數(shù)學(xué)\t英語(yǔ)\t語(yǔ)文\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("查找學(xué)生信息\n"); printf("請(qǐng)選擇查找方式:1,按學(xué)號(hào);2,按姓名\n"); printf("choice="); scanf("%d",&choice); if(choice==1) { printf("請(qǐng)輸入學(xué)號(hào):"); scanf("%d",&num); presult=findByNum(head,num); } else { printf("請(qǐng)輸入姓名\n"); scanf("%s",name); presult=findByName(head,name); } if(presult!=NULL) { printf("找到了,該生信息如下:\n學(xué)號(hào)\t姓名\t數(shù)學(xué)\t英語(yǔ)\t語(yǔ)文\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("查無(wú)此人!\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; } //函數(shù)說(shuō)明: // 在head所指向鏈表中,查找學(xué)號(hào)為num的節(jié)點(diǎn) // 找到后,返回兩個(gè)值:指向當(dāng)前節(jié)點(diǎn)的指針presult,指向當(dāng)前節(jié)點(diǎn)的前一節(jié)點(diǎn)的指針pbefore, // presult通過(guò)函數(shù)返回值返回(即return),pbefore通過(guò)輸出型參數(shù)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("要?jiǎng)h除的學(xué)號(hào):"); scanf("%d",&num); presult=findByNumEx(head,num,&pbefore); if(presult!=NULL) { printf("找到了,該生信息如下:\n學(xué)號(hào)\t姓名\t數(shù)學(xué)\t英語(yǔ)\t語(yǔ)文\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("無(wú)與此學(xué)生相關(guān)的信息\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("學(xué)號(hào)\t姓名\t數(shù)學(xué)\t英語(yǔ)\t語(yǔ)文\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("請(qǐng)選擇:按1繼續(xù)添加->按0結(jié)束添加\n"); printf("choice="); scanf("%d",&choice); if(choice==0) { printf("信息添加完畢!\n"); break; } } return head; } void update(STU *head) { STU *presult; int num; printf("輸入要修改學(xué)生的學(xué)號(hào)\n"); scanf("%d",&num); presult=findByNum(head,num); if(presult==NULL) printf("查無(wú)此人!無(wú)法修改!\a\n"); else { printf("找到了,該生信息如下:\n學(xué)號(hào)\t姓名\t數(shù)學(xué)\t英語(yǔ)\t語(yǔ)文\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("學(xué)號(hào)\t姓名\t數(shù)學(xué)\t英語(yǔ)\t語(yǔ)文\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("現(xiàn)在進(jìn)入保存當(dāng)前信息到文件的處理\n"); printf("請(qǐng)輸入文件名:"); scanf("%s",filename); if((fp=fopen(filename,"w"))==NULL) { printf("無(wú)法打開(kāi)文件\n"); return; } fprintf(fp,"全部學(xué)生信息如下:\n學(xué)號(hào)\t姓名\t數(shù)學(xué)\t英語(yǔ)\t語(yǔ)文\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("現(xiàn)在進(jìn)行從文件加載的處理,輸入文件名:"); 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("現(xiàn)在進(jìn)入學(xué)生信息文件的備份\n"); printf("源文件名:"); scanf("%s",infile); printf("備份文件名:"); scanf("%s",outfile); if((in=fopen(infile,"r"))==NULL) { printf("文件無(wú)法打開(kāi)\n"); exit(0); } if((out=fopen(outfile,"w"))==NULL){ printf("文件無(wú)法打開(kāi)\n"); exit(0); } while(!feof(in)) fputc(fgetc(in),out); fclose(in); fclose(out); }
程序運(yùn)行效果圖:
關(guān)于“怎么用C語(yǔ)言模擬實(shí)現(xiàn)學(xué)生學(xué)籍管理系統(tǒng)”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。