C语言学生学籍管理系统 链表+存储数据到文档
生活随笔
收集整理的這篇文章主要介紹了
C语言学生学籍管理系统 链表+存储数据到文档
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
有勇氣的牛排
官方地址:官網:www.920vip.net/
基本原理:利用鏈表和文件讀寫實現具有永久存儲數據的系統
文件命名:StudentSystem.cpp
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<windows.h> //創建結構體 struct students {int id;char name[60];char address[60]; };//創建鏈表struct node {struct students data;struct node *next; };struct node *create_students(); void print_students(struct node *h); void sort_students(struct node *h); void modify_students(struct node *h); void delete_students(struct node *h); void menu();main(){struct node *h=NULL;system("mode con cols=100 lines=30");int x,i=1;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE|FOREGROUND_INTENSITY); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_INTENSITY); do{menu();printf(" 請輸入您的選擇:");scanf("%d",&x);switch (x){case 1:h=create_students();break;case 2:print_students(h);break;case 3:sort_students(h);break;case 4:modify_students(h);break;case 5:delete_students(h);break;case 6:printf("歡迎下次訪問,再見!!!\n");exit(0);break;}}while(x!=5);return 0; }//菜單void menu(){printf("\n\n\n **************************************學生學籍信息管理系統************************************** \n\n");printf(" * * \n\n");printf(" * * \n\n");printf(" * 1--- 學生學籍信息錄入 --- * \n\n");printf(" * 2--- 查看學生信息 --- * \n\n");printf(" * 3--- 學生學籍排序 --- * \n\n");printf(" * 4--- 修改學生信息 --- * \n\n");printf(" * 5--- 刪除學生信息 --- * \n\n");printf(" * 6--- 退出系統 --- * \n\n\n\n");printf(" ************************************************************************************************ \n\n\n\n");}//一、輸入學生學籍信息 struct node *create_students() {FILE *fp;int x,m=1;char nam[60],a[60];struct node *h,*p,*q,*n;system("cls");printf("\n\n\n\n\n\n\n\n\n\n\n\n");printf(" 請輸入第%d位學生id(輸入-1結束):",m);scanf("%d",&x);getchar();if(x!=-1){printf(" 姓名:");gets(nam);printf(" 地址:");gets(a);}if(x!=-1){h=(struct node*)malloc(sizeof(struct node));h->data.id=x;strcpy(h->data.name,nam);strcpy(h->data.address,a);h->next=NULL;p=h;n=p;}while(x!=-1){m++;printf(" 請輸入第%d位學生id(輸入-1結束):",m);scanf("%d",&x);getchar();if(x!=-1){printf(" 姓名:");gets(nam);printf(" 地址:");gets(a);}if(x!=-1){q=(struct node*)malloc(sizeof(struct node));q->data.id=x;strcpy(q->data.name,nam);strcpy(q->data.address,a);q->next=NULL;p->next=q;p=p->next;} }//printf("========打印r鏈表=========\n");//printf("測試%d\n",n->data.id);//while(n!=NULL){// printf("%d %s %s\n",n->data.id,n->data.name,n->data.address);// n=n->next;//}//printf("========打印r鏈表結束=========\n");//存檔//n=n->next;fp=fopen("book.txt","a");if(fp==NULL){printf("文件打開失敗\n");exit(1);}//fprintf(fp,"\n");while(n!=NULL){fprintf(fp,"%-20d %-20s %-20s\n",n->data.id,n->data.name,n->data.address);n=n->next;}fclose(fp);return h; }//二、輸出所有學生信息 void print_students(struct node *h) {h=(struct node*)malloc(sizeof(struct node));FILE *fp;struct node *p,*q,*r;system("cls");p=h;int id,i=1,j=1,ok;//統計人數 j,k用排序char name_stu[60],address_stu[60];fp=fopen("book.txt","r");if(fp==NULL){printf("文件打開失敗");}else{printf("文件打開成功\n");while(fscanf(fp," %d %s %s",&id,name_stu,address_stu)!=EOF){//printf("\n");//printf("---第%d次循環\n",i);//i++;q=(struct node*)malloc(sizeof(struct node));//printf("內存申請成功\n");strcpy(q->data.name,name_stu);//printf("%s ",q->data.name);strcpy(q->data.address,address_stu);//printf("%s ",q->data.address);q->data.id=id;//printf("%d\n",q->data.id);//printf("------------------------\n");q->next=NULL;p->next=q;p=p->next;//p->next=q;//p=q;}}//p->next=NULL;fclose(fp);r=h;r=r->next;printf("序號 學號 姓名 地址\n");while(r!=NULL){printf("%d:",j);j++;printf(" %d %s %s\n",r->data.id,r->data.name,r->data.address);r=r->next;}printf("輸入1查看結束:");scanf("%d",&ok);if(ok==1){system("cls");menu();}}//三、排序功能 思路:讀取--修改--保存 void sort_students(struct node *h) {system("cls");//1.讀取h=(struct node*)malloc(sizeof(struct node));FILE *fp;struct node *p,*q,*r,*n;p=h;//q=h;int id,i=0,sort,j,k,x;//x用于排序暫時存儲char name_stu[60],address_stu[60],s_name[60],s_address[60];fp=fopen("book.txt","r");if(fp==NULL){printf("文件打開失敗");}else{//printf("文件打開成功\n");while(fscanf(fp," %d %s %s",&id,name_stu,address_stu)!=EOF){//printf("\n");//printf("---第%d次循環\n",i);i++;q=(struct node*)malloc(sizeof(struct node));//printf("內存申請成功\n");strcpy(q->data.name,name_stu);//printf("%s ",q->data.name);strcpy(q->data.address,address_stu);//printf("%s ",q->data.address);q->data.id=id;//printf("%d\n",q->data.id);//printf("------------------------\n");q->next=NULL;p->next=q;p=p->next;}}fclose(fp);//2.修改----->>實現排序r=h; //r為主鏈表r=r->next;n=r;q=r->next;printf("%d",r->data.id);printf("%d",q->data.id);//printf("總長度為:%d\n",i);while(true){printf("\n\n\n\n\n\n\n\n\n\n\n\n");printf(" 從小到大排序請按1,從大到小排序請按0:");scanf("%d",&sort);if(sort==0 || sort==1){break;}else{printf("您的輸入有誤"); }}//printf("判斷成功\n");//printf("333%d\n",r->data.id);//printf("333%d\n",q->data.id);//從小到大排序if(sort==1){//printf("-----從小到大排序-----\n");for(j=0;j<i-1;j++)//while(r!=NULL){//printf("=========%d==\n",r->data.id);for(k=j+1;k<i;k++)//while(q!=NULL){//printf("--%d-\n",q->data.id);if((r->data.id)>(q->data.id)){x=r->data.id;strcpy(s_name,r->data.name);strcpy(s_address,r->data.address);r->data.id=q->data.id;strcpy(r->data.name,q->data.name);strcpy(r->data.address,q->data.address);q->data.id=x;strcpy(q->data.name,s_name);strcpy(q->data.address,s_address);}q=q->next;}r=r->next;q=r->next;}printf("排序成功\n");}//從大到小排序if(sort==0){printf("-----從大到小排序-----\n");for(j=0;j<i-1;j++)//while(r!=NULL){//printf("=========%d==\n",r->data.id);for(k=j+1;k<i;k++)//while(q!=NULL){//printf("--%d-\n",q->data.id);if((r->data.id)<(q->data.id)){//x=r->data.id;//r->data.id=q->data.id;//q->data.id=x;x=r->data.id;strcpy(s_name,r->data.name);strcpy(s_address,r->data.address);r->data.id=q->data.id;strcpy(r->data.name,q->data.name);strcpy(r->data.address,q->data.address);q->data.id=x;strcpy(q->data.name,s_name);strcpy(q->data.address,s_address);}q=q->next;}r=r->next;q=r->next;}printf("排序成功\n");}//printf("========打印r鏈表=========\n");//n=r;//printf("測試%d\n",n->data.id);//while(n!=NULL){// printf("%d %s %s\n",n->data.id,n->data.name,n->data.address);// n=n->next;//}//printf("========打印r鏈表結束=========\n");//排序存檔//FILE *fp;fp=fopen("book.txt","w");if(fp==NULL){printf("文件打開失敗\n");exit(1);}//fprintf(fp,"\n");while(n!=NULL){fprintf(fp,"%-20d %-20s %-20s\n",n->data.id,n->data.name,n->data.address);n=n->next;}fclose(fp);}//四、===========修改學生信息====== void modify_students(struct node *h) {system("cls");//變量int searchId,x,NewId;// x:選項 searchId:按學號搜 n:新學號 char NewName[60],NewAddress[60];//1.讀取文件,并將內容重新放到結構體p中int id;char name_stu[60],address_stu[60],s_name[60],s_address[60];h=(struct node*)malloc(sizeof(struct node));FILE *fp;struct node *p,*q,*r,*n;p=h;r=p;n=p;fp=fopen("book.txt","r");if(fp==NULL){printf("文件打開失敗");}else{//printf("文件打開成功\n");while(fscanf(fp," %d %s %s",&id,name_stu,address_stu)!=EOF){q=(struct node*)malloc(sizeof(struct node));strcpy(q->data.name,name_stu);strcpy(q->data.address,address_stu);q->data.id=id;q->next=NULL;p->next=q;p=p->next;}}fclose(fp);//printf("結束\n\n");//2.找到對應學生printf("\n\n\n\n\n\n\n\n\n\n\n\n");printf(" 請輸入您所要修改學生的ID:");scanf("%d",&searchId);printf("您將選擇ID為%d的學生!!!\n",searchId);r=r->next;while(r!=NULL){if(searchId==r->data.id){//初始化變量NewId=r->data.id;strcpy(NewName,r->data.name);strcpy(NewAddress,r->data.address);printf(">>>>>>>>>>>>%s\n",r->data.name);printf(">>>>>>>>>>>>%s\n",r->data.address);while(true){printf(" 請輸入您要改的項目(1:學號、2:姓名、3:地址、-1:確認修改):");scanf("%d",&x);getchar();//獲取新學號if(x==1){printf(" 請輸入新學號:");scanf("%d",&NewId);getchar();printf("\n+++++++++%d\n",NewId);}//獲取新姓名if(x==2){printf(" 請輸入新姓名:");gets(NewName);printf("\n+++++++++%s\n",NewName);}//獲取新地址if(x==3){printf("請輸入新地址:");gets(NewAddress);printf("\n+++++++++%s\n",NewAddress);}//確認修改if(x==-1){break;}}//確認修改信息r->data.id=NewId;strcpy(r->data.name,NewName);strcpy(r->data.address,NewAddress);printf("修改成功!!!\n新學號為:%d 新姓名為:%s 新地址為:%s\n",r->data.id,r->data.name,r->data.address);break;}r=r->next;}//存檔n=n->next;fp=fopen("book.txt","w");if(fp==NULL){printf("文件打開失敗\n");exit(1);}//fprintf(fp,"\n");while(n!=NULL){fprintf(fp,"%-20d %-20s %-20s\n",n->data.id,n->data.name,n->data.address);n=n->next;}fclose(fp); }//五、刪除指定學生信息 void delete_students(struct node *h) {system("cls");//變量int searchId;// x:選項 searchId:按學號搜//1.讀取文件,并將內容重新放到結構體p中int id;char name_stu[60],address_stu[60],s_name[60],s_address[60];h=(struct node*)malloc(sizeof(struct node));FILE *fp;struct node *p,*q,*r,*m,*n,*k;//m:用來切割節點保存前一個節點p=h;r=p;//查詢指針m=p;//n=r;//存數據指針fp=fopen("book.txt","r");if(fp==NULL){printf("文件打開失敗");}else{//printf("文件打開成功\n");while(fscanf(fp," %d %s %s",&id,name_stu,address_stu)!=EOF){q=(struct node*)malloc(sizeof(struct node));strcpy(q->data.name,name_stu);strcpy(q->data.address,address_stu);q->data.id=id;q->next=NULL;p->next=q;p=p->next;}}fclose(fp);//2.找到對應學生printf("\n\n\n\n\n\n\n\n\n\n\n\n");printf(" 請輸入您所要刪除學生的學生號");scanf("%d",&searchId);getchar();//printf("您將選擇ID為%d的學生!!!\n",searchId);//r=r->next;//m=r->next;while(r->next!=NULL){//printf("%d ",r->data.id);//printf("%d \n",m->data.id);k=r;r=r->next;if(searchId==r->data.id){//printf("YYYYYYYYYYYYYYYYYYY");k->next=r->next;free(r);r=k->next;break;}}printf(" 刪除成功\n");//輸出r鏈表 測試是否修改成功 為存檔做準備//n=n->next;//printf("========打印r鏈表=========\n");//printf("測試%d\n",n->data.id);//while(n!=NULL){// printf("%d %s %s\n",n->data.id,n->data.name,n->data.address);// n=n->next;//}//printf("========打印r鏈表結束=========\n");//存檔n=n->next;fp=fopen("book.txt","w");if(fp==NULL){printf("文件打開失敗\n");exit(1);}//fprintf(fp,"\n");while(n!=NULL){fprintf(fp,"%-20d %-20s %-20s\n",n->data.id,n->data.name,n->data.address);n=n->next;}fclose(fp);main();//==扣扣群聊172842597== }總結
以上是生活随笔為你收集整理的C语言学生学籍管理系统 链表+存储数据到文档的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信小程序之配置app.json
- 下一篇: 微信小程序 通过云函数请求http网站接