<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
學生學籍管理系統的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(" tt******學生成績管理系統*********n"); printf(" tt* 1.輸入學生資訊 *n"); printf(" tt* 2.顯示全部學生資訊 *n"); printf(" tt* 3.查詢學生資訊 *n"); printf(" tt* 4.新增學生資訊 *n"); printf(" tt* 5.刪除學生資訊 *n"); printf(" tt* 6.修改學生資訊 *n"); printf(" tt* 7.對學生資訊排序 *n"); printf(" tt* 8.儲存當前資訊到檔案 *n"); printf(" tt* 9.備份 *n"); printf(" tt* 10.從檔案載入學生資訊 *n"); printf(" tt* 0.退出系統 *n"); printf(" tt*******************************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("%dt%st%.2ft%.2ft%.2ft%.2fn",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("%dt%st%.2ft%.2ft%.2ft%.2fn",presult->num,presult->name,presult->score[0],presult->score[1],presult->score[2],presult->ave); } else printf("查無此人!an"); } 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("%dt%st%.2ft%.2ft%.2ft%.2fn",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("無與此學生相關的資訊aan"); 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("查無此人!無法修改!an"); else { printf("找到了,該生資訊如下:n學號t姓名t數學t英語t語文t平均分n"); printf("%dt%st%.2ft%.2ft%.2ft%.2fn",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,"%dt%st%.2ft%.2ft%.2ft%.2fn",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); }
程式執行效果圖:
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45