<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了C語言連結串列實現學生資訊管理系統的具體程式碼,供大家參考,具體內容如下
事先存入的資料:
選單
建立連結串列並倒序輸出
輸出連結串列中的全部資訊
寫入資訊並儲存至檔案中(覆蓋原有檔案)
隨機讀取
指定查詢
新增資訊
指定刪除
特殊查詢
特殊刪除
退出系統
#include<iostream> #include<string.h> #include<stdlib.h> #include<iomanip> #include<fstream> #include<time.h> int length=0; using namespace std; char a[10],b[10],c[10],d[10],e[10],f[10],g[10]; //定義學生資訊的結構體型別,包括:學號、姓名、專業、班級、3門成績 typedef struct StuNode { char grad[10];//學號 char name[10];//姓名 char spec[10];//專業 char stu_class[10];//班級 int score1; int score2; int score3; struct StuNode *next; }student, *StuLink; void Sort(StuLink &head)//從小到大進行氣泡排序 { StuLink tmp,pre,p,q; if (head->next) { p = head->next->next; head->next->next = NULL; while (p) { pre = head; //pre是q的前驅 q = pre->next; while (q && strcmp(q->grad,p->grad)<0)//從連結串列第二個結點開始找比當前插入值大的結點 { pre = pre->next; q = q->next; } tmp = p->next;//將p插入到結點pre和q之間 p->next = q; pre->next = p; p = tmp; } } } student *CreateList()//初始化:建立連結串列 { void Output(StuLink &p); StuLink head = (student*)malloc(sizeof(student)); StuLink p,q; p = head; q = head; char grad[10];//學號 char name[10];//姓名 char spec[10];//專業 char stu_class[10];//班級 int score1; int score2; int score3; FILE *r= fopen("2.txt","r"); if(r==NULL) { printf("開啟檔案失敗!"); return NULL; } fscanf(r,"%s%s%s%s%s%s%s",&a,&b,&c,&d,&e,&f,&g);//讀取標題 while(fscanf(r,"%s%s%s%s%d%d%d",grad,name,spec,stu_class,&score1,&score2,&score3)!=EOF) { q = (student*)malloc(sizeof(student)); strcpy(q->grad,grad); strcpy(q->name,name); strcpy(q->spec,spec); strcpy(q->stu_class,stu_class); q->score1 = score1; q->score2 = score2; q->score3 = score3; p->next = q; p = q; length++; } p->next = NULL; Sort(head); //倒序輸出 StuLink k = head,t; while(k->next) k = k->next; while(k!=head) { //倒序輸出 t = head; while(t->next!=k) t = t->next;//t為k前驅 k = t; } return head; } void Output(StuLink &p)//輸出資訊 { printf("%5s %-5s %-3s %s %3d %3d %3dn",p->grad,p->name,p->spec,p->stu_class,p->score1,p->score2,p->score3); } void Print_List(StuLink &head)//列印整個連結串列 { StuLink p = head->next; while(p) { Output(p); p = p->next; } } void Save(StuLink &head)//寫入檔案。 { StuLink p = (student*)malloc(sizeof(student)),q = head->next; char grad[10],name[10],spec[10],stu_class[10]; int score1,score2,score3; printf("請輸入學生資訊:n"); scanf("%s%s%s%s%d%d%d",p->grad,p->name,p->spec,p->stu_class,&p->score1,&p->score2,&p->score3); FILE *w =fopen("2.txt","a"); if(w==NULL) { printf("開啟檔案失敗!n"); return; } else printf("寫入成功!n"); fprintf(w,"n%s %s %s %s %d %d %d",p->grad,p->name,p->spec,p->stu_class,p->score1,p->score2,p->score3); fclose(w); //存入連結串列 p->next = q; head->next = p; Sort(head); } void Fetch(StuLink &H)//隨機讀取某個學生的資訊。 { StuLink p = H->next; int i = time(NULL) % length; int j = i; while(j) { p = p->next; j--; } printf("第%d名學生n",i+1); printf(" 學號 姓名 專業 班級 成績1 成績2 成績3n"); Output(p); } student *Search_num(StuLink &H) { //查詢指定學號的學生,返回指向該學生結點的指標。 char grad[10]; printf("請輸入查詢資訊的學號:"); scanf("%s",grad); StuLink p = H->next; while(p) { if(strcmp(p->grad,grad)==0) return p; p = p->next; } return NULL; } void InsertList(StuLink &H) { //在函數中輸入一個學生的資訊,將該學生資訊插入到連結串列中的相應位置,並保持此連結串列按學號的有序性。 StuLink p = H->next, q = H; StuLink insert = (student*)malloc(sizeof(student)); printf("請輸入學生資訊:n"); scanf("%s%s%s%s%d%d%d",insert->grad,insert->name,insert->spec,insert->stu_class,&insert->score1,&insert->score2,&insert->score3); while(p) { if(strcmp(p->grad,insert->grad) > 0 ) { q->next = insert;//應插入q和p之間 insert->next = p; break; } q = q->next;//q是p的前驅 p = p->next; } if(!p)//insert的學號大於所有已知值 { q->next = insert; insert->next = NULL; } p = H->next; printf("n"); Print_List(H); } void Delete_num(StuLink &H)//從連結串列中刪除指定學號的學生。 { StuLink p = H->next, q = H; char grad[10]; printf("請輸入想刪除的學生的學號:n"); scanf("%s",grad); while(p) { if(strcmp(p->grad,grad)==0) { q->next = p->next; free(p); break; } q = q->next; p = p->next; } FILE *w =fopen("2.txt","w"); p=H->next; while(p) { fprintf(w,"%5s %-5s %-3s %s %3d %3d %3dn",p->grad,p->name,p->spec,p->stu_class,p->score1,p->score2,p->score3); p = p->next; } fclose (w); Print_List(H); } student *Search_major_subject_score(StuLink &H) { //查詢某個專業的、某門課程的成績小於某個分數的學生,返回指向該學生結點的指標。 char spec[10]; float score; StuLink p = H->next; int lesson; printf("請輸入專業、課程式號和門限分數:n"); scanf("%s%d%f",spec,&lesson,&score); while(p) { if(strcmp(p->spec,spec)==0) if(lesson==1 && p->score1<score || lesson==2 && p->score2<score || lesson==3 && p->score3<score) return p; p = p->next; } return NULL; } void Delete_major_subject(StuLink &H) { //從連結串列中刪除某個專業的、某門課程的成績小於某個分數的學生。 char spec[10]; float score; StuLink p = H->next, q = H; int lesson,flag = 0; printf("請輸入專業、課程式號和門限分數:n"); scanf("%s%d%f",spec,&lesson,&score); while(p) { if(strcmp(p->spec,spec)==0 && lesson == 1 && p->score1 < score) // cs 1 94 { Output(p); q->next = p->next; free(p); p = q->next; flag = 1; } else if(strcmp(p->spec,spec)==0 && lesson == 2 && p->score2 < score) // cs 1 94 { Output(p); q->next = p->next; free(p); p = q->next; flag = 1; } else if(strcmp(p->spec,spec)==0 && lesson == 3 && p->score3 < score) // cs 1 94 { Output(p); q->next = p->next; free(p); p = q->next; flag = 1; } else { q = p; p = p->next; } } if(flag==0) printf("不存在此學生!n"); else printf("成功刪除n"); FILE *w =fopen("2.txt","w"); p=H->next; while(p) { fprintf(w,"%5s %-5s %-3s %s %3d %3d %3dn",p->grad,p->name,p->spec,p->stu_class,p->score1,p->score2,p->score3); p = p->next; } fclose (w); Print_List(H); } void write(StuLink &H)//寫入其他檔案 { StuLink p = H->next; FILE *w = fopen("other.txt","w"); fprintf(w,"%s %s %s %s %s %s %s",a,b,c,d,e,f,g); while(p) { fprintf(w,"n%s %s %s %s %d %d %d",p->grad,p->name,p->spec,p->stu_class,p->score1,p->score2,p->score3); p = p->next; } fclose(w); printf("寫入成功!"); } char menu() { char ch1; printf(" tttt 歡迎存取學生資訊登記系統! n"); printf("ttt ___________________________________________________________n"); printf("ttttt 1 Creatlist 寫入資訊建立連結串列並倒序輸出n"); printf("ttttt 2 Output 輸出全部資訊n"); printf("ttttt 3 save 儲存檔案n"); printf("ttttt 4 Fetch 隨機讀取n"); printf("ttttt 5 Search num 指定查詢n"); printf("ttttt 6 Insertlist 新增資訊 n"); printf("ttttt 7 Delete num 指定刪除n"); printf("ttttt 8 Search_major _subject_score 特殊查詢n"); printf("ttttt 9 Delete_major _subject_score 特殊刪除n"); printf("ttttt 10 Exit 退出系統n"); printf("ttt ___________________________________________________________n"); } void read(StuLink &head)//讀取檔案函數 { StuLink p = (student*)malloc(sizeof(student)),q = head->next; char grad[10],name[10],spec[10],stu_class[10]; int score1,score2,score3; FILE *w =fopen("2.txt","a"); if(w==NULL) { printf("開啟檔案失敗!n"); return; } else { StuLink p = head->next; while(p) { Output(p); p = p->next; } printf("輸出成功!n"); fprintf(w,"n%s %s %s %s %d %d %d",p->grad,p->name,p->spec,p->stu_class,p->score1,p->score2,p->score3); } fclose(w); //存入連結串列 } int main() { StuLink H = CreateList(),temp; int k; menu(); scanf("%d",&k); k = int(k); while(k) { k = int(k); switch(k) { case 0: break; case 1: { StuLink head = (student*)malloc(sizeof(student)); StuLink p,q; p = head; q = head; char grad[10];//學號 char name[10];//姓名 char spec[10];//專業 char stu_class[10];//班級 int score1; int score2; int score3; FILE *r= fopen("2.txt","r"); if(r==NULL) { printf("開啟檔案失敗!"); } fscanf(r,"%s%s%s%s%s%s%s",&a,&b,&c,&d,&e,&f,&g);//讀取標題 while(fscanf(r,"%s%s%s%s%d%d%d",grad,name,spec,stu_class,&score1,&score2,&score3)!=EOF) { q = (student*)malloc(sizeof(student)); strcpy(q->grad,grad); strcpy(q->name,name); strcpy(q->spec,spec); strcpy(q->stu_class,stu_class); q->score1 = score1; q->score2 = score2; q->score3 = score3; p->next = q; p = q; length++; } p->next = NULL; Sort(head); StuLink k = head,t; while(k->next) k = k->next; printf("倒序輸出:n 學號 姓名 專業 班級 成績1 成績2 成績3n"); while(k!=head) { //倒序輸出 t = head; while(t->next!=k) t = t->next;//t為k前驅 Output(k); k = t; } } menu(); break; case 2: Print_List(H); menu(); break; case 3: Save(H); menu(); break; case 4: Fetch(H); menu(); break; case 5: temp = Search_num(H); if(temp) { printf("指標為:%dn",temp); printf(" 學號 姓名 專業 班級 成績1 成績2 成績3n"); Output(temp); } else printf("不存在此學生!n"); menu(); break; case 6: InsertList(H); menu(); break; case 7: Delete_num(H); menu(); break; case 8: temp = Search_major_subject_score(H); if(temp) { printf("指標為:%dn",temp); printf(" 學號 姓名 專業 班級 成績1 成績2 成績3n"); Output(temp); } else printf("不存在此學生!n"); menu(); break; case 9: Delete_major_subject(H); menu(); break; case 99: read(H); menu(); break; case 10: printf("n ~~~~~~~~~~~~~~~~~~~~~~~~~~n"); //退出提示 printf(" Goodbye! n"); printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~n"); exit(0);//將程式退出 default: printf("輸入有誤,請重新輸入!n"); } printf("請輸入選項:"); scanf("%d",&k); } return 0; }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援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