<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了C語言實現學生資訊管理系統的具體程式碼,供大家參考,具體內容如下
前言:與上篇文章相比,增加了檔案操作,可將任意時期的的學生資料儲存再檔案中,選單也隨之改動,增加了檔案操作一欄,是否儲存到相應檔案中由使用者決定
//學生資料檔案儲存 //儲存任意時期的學生資料 void Store_List(Link head) { //檔案操作 ofstream ofs; ofs.open("Std_Information.txt",ios::out); if(head==NULL) { printf("學生為空n"); return; } else { Link p=head->next; while(p) { ofs<< "姓名:"<<p->data.studentName<<" 學號:"<<p->data.studentNo<<" 成績:"<<p->data.score<<endl; p=p->next; } } }
#include <stdio.h> #include<string.h> #include<malloc.h> #include<stdlib.h> #include<stdbool.h> #include<iostream> #include<fstream>//檔案操作所需標頭檔案 using namespace std; #define NO_LENGTH 20 #define NAME_LENGTH 11 /* 定義學生結構體的資料結構 */ typedef struct Student{ char studentNo[NO_LENGTH]; char studentName[NAME_LENGTH]; int score; }st; /* 定義每條記錄或節點的資料結構 */ typedef struct node { struct Student data; //資料域 struct node *next; //指標域 }Node,*Link; //Node為node型別的別名,Link為node型別的指標別名
typedef struct Student{ char studentNo[NO_LENGTH]; char studentName[NAME_LENGTH]; int score; }st;
/* 定義每條記錄或節點的資料結構 */ typedef struct node { struct Student data; //資料域 struct node *next; //指標域 }Node,*Link; //Node為node型別的別名,Link為node型別的指標別名
//定義提示選單 void myMenu(){ printf("*****************************選單*****************************n"); printf("***********************1 增加學生記錄*************************n"); printf("***********************2 刪除學生記錄*************************n"); printf("***********************3 查詢學生記錄*************************n"); printf("***********************4 修改學生記錄*************************n"); printf("***********************5 統計學生人數 ************************n"); printf("***********************6 顯示學生記錄*************************n"); printf("***********************7 資訊檔案列印*************************n"); printf("***********************8 退出系統 ****************************n"); }
void inputStudent(Link l){ printf("請輸入學生學號:"); scanf("%s",l->data.studentNo); printf("請輸入學生的姓名:"); scanf("%s",l->data.studentName); printf("請輸入學生的成績:"); scanf("%s",&(l->data.score)); //每個新建立的節點的next域都初始化為NULL l->next = NULL; system("cls"); }
void inputStudentNo(char s[],char no[]){ printf("請輸入要%s的學生學號:",s); scanf("%s",no); }
//遍歷表中學生 void displayNode(Link head){ if(head==NULL) { printf("學生為空n"); return; } else { Link p=head->next; while(p) { cout<<"姓名:"<<p->data.studentName<<" 學號"<<p->data.studentNo<<" 成績:"<<p->data.score<<endl; p=p->next; } } // 填寫程式碼,根據傳入的連結串列head頭指標,掃描連結串列顯示所有節點的資訊 system("pause"); system("cls"); }
/* 增加學生記錄 */ bool addNode(Link head){ Link p,q; //p,q兩個節點一前一後 Link node; //node指標指向新建立的節點 node=(Link)malloc(sizeof(Node)); inputStudent(node); q = head; p = head->next; //q指向head後面的第一個有效節點 if(head->next==NULL) //連結串列為空時 head->next = node; else { //迴圈存取連結串列中的所有節點 while(p != NULL){ if (node->data.studentNo < p->data.studentNo){ //如果node節點的學號比p節點的學號小,則插在p的前面,完成插入後,提前退出子程式 q->next = node; node->next = p; return true; } else{ //如果node節點的學號比p節點的學號大,繼續向後移動指標(依然保持pq一前一後) q = p; p = p->next; } } //如果沒能提前退出迴圈,則說明之前沒有插入,那麼當前node節點的學號是最大值,此時插在連結串列的最後面 q->next = node; } return true; system("pause"); system("cls"); }
//刪除學生資訊 bool deleteNode(Link head){ // 按照給定的學號刪除學生記錄,如果刪除成功返回true,如果沒找到學號返回false //輸入要處理的學號 char no[NO_LENGTH]; inputStudentNo("刪除",no); Link p=head->next; Link q=head; while(p) { if(strcmp(p->data.studentNo,no)==0) { cout<<"成功刪除該學生"<<endl; q->next=p->next; free(p); system("pause"); system("cls"); return true; } else { q=p; p=p->next; } } cout<<"未找到該學生"<<endl; system("pause"); system("cls"); return false; }
//查詢學生資訊 bool queryNode(Link head){ // 按照給定的學號查詢學生記錄,如果查詢成功返回true,如果沒找到學號返回false //輸入要處理的學號 char no[NO_LENGTH]; inputStudentNo("查詢",no); Link p=head->next; while(p) { if(strcmp(p->data.studentNo,no)==0) { system("cls"); cout<<"姓名:"<<p->data.studentName<<" 學號:"<<p->data.studentNo<<" 成績:"<<p->data.score<<endl; return true; } else { p=p->next; } } cout<<"未找到該學生"<<endl; system("cls"); return false; }
//修改學生資訊 bool modifyNode(Link head){ // 按照給定的學號找到學生記錄節點,如果修改成功返回true,如果沒找到學號返回false //輸入要處理的學號 char no[NO_LENGTH]; inputStudentNo("修改",no); Link p=head->next; while(p) { if(strcmp(p->data.studentNo,no)==0) { cout<<"請輸入修改後的姓名"<<endl; cin>>p->data.studentName; cout<<"請輸入修改後的學號"<<endl; cin>>p->data.studentNo; cout<<"請輸入修改後的成績"<<endl; cin>>p->data.score; system("cls"); return true; } else { p=p->next; } } cout<<"未找到該學生,請重新輸入學號"<<endl; system("cls"); return false; }
//統計學生人數 int countNode(Link head){ //統計學生人數,掃描連結串列統計節點個數,返回節點數 Link p; int count = 0; p = head->next; while(p) { p=p->next; count++; } //填充程式碼 system("cls"); return count; }
//清空連結串列 void clearLink(Link head){ Link q,p; p=head->next; q=head; while(p) { q->next=p->next; free(p); p=q->next; } //遍歷連結串列,用free語句刪除連結串列中用malloc建立起的所有的節點 }
//學生資料檔案儲存 //儲存任意時期的學生資料 void Store_List(Link head) { //檔案操作 ofstream ofs; ofs.open("Std_Information.txt",ios::out); if(head==NULL) { printf("學生為空n"); return; } else { Link p=head->next; while(p) { ofs<< "姓名:"<<p->data.studentName<<" 學號:"<<p->data.studentNo<<" 成績:"<<p->data.score<<endl; p=p->next; } } }
int main() { int select; int count; Link head; // 定義連結串列 //建立head頭結點,在這個程式中head指向頭結點,頭結點data部分沒有內容,其後續節點才有真正的資料 head = (Link)malloc(sizeof(Node)); head->next = NULL; while(1) { myMenu(); printf("n請輸入你的選擇(0-7):"); //顯示提示資訊 scanf("%d",&select); switch(select) { case 1: //增加學生記錄 if(addNode(head)) printf("成功插入一個學生記錄。nn"); break; case 2: //刪除學生記錄 if(deleteNode(head)) printf("成功刪除一個學生記錄。nn"); else printf("沒有找到要刪除的學生節點。nn"); break; case 3: //查詢學生記錄 if(queryNode(head)) printf("成功找到學生記錄。nn"); else printf("沒有找到要查詢的學生節點。nn"); break; case 4: //修改學生記錄 if(modifyNode(head)) printf("成功修改一個學生記錄。nn"); else printf("沒有找到要修改的學生節點。nn"); break; case 5: //統計學生人數 count = countNode(head); printf("學生人數為:%dnn",count); break; case 6: //顯示學生記錄 displayNode(head); break; case 7: //退出前清除連結串列中的所有結點 clearLink(head); return 0; default: printf("輸入不正確,應該輸入0-7之間的數。nn"); system("cls"); break; } } return 0; }
#include <stdio.h> #include<string.h> #include<malloc.h> #include<stdlib.h> #include<stdbool.h> #include<iostream> #include<fstream>//檔案操作所需標頭檔案 using namespace std; #define NO_LENGTH 20 #define NAME_LENGTH 11 /* 定義學生結構體的資料結構 */ typedef struct Student{ char studentNo[NO_LENGTH]; char studentName[NAME_LENGTH]; int score; }st; /* 定義每條記錄或節點的資料結構 */ typedef struct node { struct Student data; //資料域 struct node *next; //指標域 }Node,*Link; //Node為node型別的別名,Link為node型別的指標別名 //定義提示選單 void myMenu(){ printf("*****************************選單*****************************n"); printf("***********************1 增加學生記錄*************************n"); printf("***********************2 刪除學生記錄*************************n"); printf("***********************3 查詢學生記錄*************************n"); printf("***********************4 修改學生記錄*************************n"); printf("***********************5 統計學生人數 ************************n"); printf("***********************6 顯示學生記錄*************************n"); printf("***********************7 資訊檔案列印*************************n"); printf("***********************8 退出系統 ****************************n"); } void inputStudent(Link l){ printf("請輸入學生學號:"); scanf("%s",l->data.studentNo); printf("請輸入學生的姓名:"); scanf("%s",l->data.studentName); printf("請輸入學生的成績:"); scanf("%d",&(l->data.score)); //每個新建立的節點的next域都初始化為NULL l->next = NULL; system("cls"); } void inputStudentNo(char s[],char no[]){ printf("請輸入要%s的學生學號:",s); scanf("%s",no); } //遍歷表中學生 void displayNode(Link head){ if(head==NULL) { printf("學生為空n"); return; } else { Link p=head->next; while(p) { cout<<"姓名:"<<p->data.studentName<<" 學號"<<p->data.studentNo<<" 成績:"<<p->data.score<<endl; //ofs<< "姓名:"<<p->data.studentName<<" 學號"<<p->data.studentNo<<" 成績:"<<p->data.score<<endl; p=p->next; } } // 填寫程式碼,根據傳入的連結串列head頭指標,掃描連結串列顯示所有節點的資訊 system("pause"); system("cls"); } /* 增加學生記錄 */ bool addNode(Link head){ Link p,q; //p,q兩個節點一前一後 Link node; //node指標指向新建立的節點 node=(Link)malloc(sizeof(Node)); inputStudent(node); q = head; p = head->next; //q指向head後面的第一個有效節點 if(head->next==NULL) //連結串列為空時 head->next = node; else { //迴圈存取連結串列中的所有節點 while(p != NULL){ if (node->data.studentNo < p->data.studentNo){ //如果node節點的學號比p節點的學號小,則插在p的前面,完成插入後,提前退出子程式 q->next = node; node->next = p; return true; } else{ //如果node節點的學號比p節點的學號大,繼續向後移動指標(依然保持pq一前一後) q = p; p = p->next; } } //如果沒能提前退出迴圈,則說明之前沒有插入,那麼當前node節點的學號是最大值,此時插在連結串列的最後面 q->next = node; } return true; system("pause"); system("cls"); } bool deleteNode(Link head){ // 按照給定的學號刪除學生記錄,如果刪除成功返回true,如果沒找到學號返回false //輸入要處理的學號 char no[NO_LENGTH]; inputStudentNo("刪除",no); Link p=head->next; Link q=head; while(p) { if(strcmp(p->data.studentNo,no)==0) { cout<<"成功刪除該學生"<<endl; q->next=p->next; free(p); system("pause"); system("cls"); return true; } else { q=p; p=p->next; } } cout<<"未找到該學生"<<endl; system("pause"); system("cls"); return false; } //查詢學生資訊 bool queryNode(Link head){ // 按照給定的學號查詢學生記錄,如果查詢成功返回true,如果沒找到學號返回false //輸入要處理的學號 char no[NO_LENGTH]; inputStudentNo("查詢",no); Link p=head->next; while(p) { if(strcmp(p->data.studentNo,no)==0) { system("cls"); cout<<"姓名:"<<p->data.studentName<<" 學號:"<<p->data.studentNo<<" 成績:"<<p->data.score<<endl; return true; } else { p=p->next; } } cout<<"未找到該學生"<<endl; system("cls"); return false; } //修改學生資訊 bool modifyNode(Link head){ // 按照給定的學號找到學生記錄節點,如果修改成功返回true,如果沒找到學號返回false //輸入要處理的學號 char no[NO_LENGTH]; inputStudentNo("修改",no); Link p=head->next; while(p) { if(strcmp(p->data.studentNo,no)==0) { cout<<"請輸入修改後的姓名"<<endl; cin>>p->data.studentName; cout<<"請輸入修改後的學號"<<endl; cin>>p->data.studentNo; cout<<"請輸入修改後的成績"<<endl; cin>>p->data.score; system("cls"); return true; } else { p=p->next; } } cout<<"未找到該學生,請重新輸入學號"<<endl; system("cls"); return false; } //統計學生人數 int countNode(Link head){ //統計學生人數,掃描連結串列統計節點個數,返回節點數 Link p; int count = 0; p = head->next; while(p) { p=p->next; count++; } //填充程式碼 system("cls"); return count; } //清空連結串列 void clearLink(Link head){ Link q,p; p=head->next; q=head; while(p) { q->next=p->next; free(p); p=q->next; } //遍歷連結串列,用free語句刪除連結串列中用malloc建立起的所有的節點 } //學生資料檔案儲存 //儲存任意時期的學生資料 void Store_List(Link head) { //檔案操作 ofstream ofs; ofs.open("Std_Information.txt",ios::out); if(head==NULL) { printf("學生為空n"); return; } else { Link p=head->next; while(p) { ofs<< "姓名:"<<p->data.studentName<<" 學號:"<<p->data.studentNo<<" 成績:"<<p->data.score<<endl; p=p->next; } } } int main() { int select; int count; Link head; // 定義連結串列 //建立head頭結點,在這個程式中head指向頭結點,頭結點data部分沒有內容,其後續節點才有真正的資料 head = (Link)malloc(sizeof(Node)); head->next = NULL; while(1) { myMenu(); printf("n請輸入你的選擇(0-8):"); //顯示提示資訊 scanf("%d",&select); switch(select) { case 1: //增加學生記錄 if(addNode(head)) printf("成功插入一個學生記錄。nn"); break; case 2: //刪除學生記錄 if(deleteNode(head)) printf("成功刪除一個學生記錄。nn"); else printf("沒有找到要刪除的學生節點。nn"); break; case 3: //查詢學生記錄 if(queryNode(head)) printf("成功找到學生記錄。nn"); else printf("沒有找到要查詢的學生節點。nn"); break; case 4: //修改學生記錄 if(modifyNode(head)) printf("成功修改一個學生記錄。nn"); else printf("沒有找到要修改的學生節點。nn"); break; case 5: //統計學生人數 count = countNode(head); printf("學生人數為:%dnn",count); break; case 6: //顯示學生記錄 displayNode(head); break; case 7:Store_List(head); cout<<"列印成功"<<endl; system("pause"); system("cls"); break; case 8: //退出前清除連結串列中的所有結點 clearLink(head); return 0; default: printf("輸入不正確,應該輸入0-8之間的數。nn"); system("pause"); system("cls"); break; } } 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