學生資訊管理系統(c語言實訓)
C語言實訓,老師讓寫一個學生資訊管理系統,要求如下:
注:本文非ACM題目,用到最多的東西是關於連結串列和指標的操作。
對於連結串列的排序我用的是交換節點的內容選擇排序。本來想著用改變指標的方法,寫了一半腦子就亂了T_T
我的程式碼:
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#define N 1000
using namespace std;
void start()
{
cout<<endl<<" ==================================================================="<<endl;
cout<<endl<<" | ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ |"<<endl;
cout<<endl<<" | 歡迎來到 **東北林業高中** 教育資訊平臺 |"<<endl;
cout<<endl<<" | |"<<endl;
cout<<endl<<" | Author---計算機(2)班 王小二 |"<<endl;
cout<<endl<<" ================================================================== "<<endl;
cout<<endl<<" 您可以根據以下提示進行您所需要的操作:"<<endl;
cout<<endl<<" 增加學生資訊----------------1 顯示學生資訊----------------2"<<endl;
cout<<endl<<" 修改學生資訊----------------3 查詢學生資訊----------------4"<<endl;
cout<<endl<<" 刪除學生資訊----------------5 對學生資訊進行排序----------6"<<endl;
cout<<endl<<" 儲存學生資訊至記錄檔案------7 從記錄檔案讀取學生資訊------8"<<endl;
cout<<endl<<" 新建學生資訊檔案------------9 執行結束-------------------10"<<endl<<endl;
}
struct student
{
int num;
char name[20];
char sex[20];
int math,chinese,english,computer,PE;
double ave;
int sum;
int rank;
student *next;
};
student *h,*t;
void creatLink()
{
void sort();
student *p1,*p2;
int n=0;
p1=(struct student *)malloc(sizeof(struct student));
h=NULL;
p1->next=NULL;
printf("請輸入資訊(輸入0,結束輸入):(例如:lvshubao man 20130000)\n");
scanf("%s",&p1->name);
if(p1->name[0]=='0')
return;
scanf("%s%d",&p1->sex,&p1->num);
printf("請輸入成績依次是:math,chinese,english,computer,PE\n");
scanf("%d%d%d%d%d",&p1->math,&p1->chinese,&p1->english,&p1->computer,&p1->PE);
h=p1;
// printf("%d\n",h->num);
// printf("%d\n",p1->num);
p2=p1;
p2->next=NULL;
p1->ave=(p1->math+p1->chinese+p1->english+p1->computer+p1->PE)/5;
p1->sum=p1->math+p1->chinese+p1->english+p1->computer+p1->PE;
//printf("%d\n",p1->sum);
p1=(struct student *)malloc(sizeof(struct student));
p2->next=p1;
printf("請再次輸入資訊:\n");
scanf("%s",&p1->name);
while(p1->name[0]!='0')
{
scanf("%s%d",&p1->sex,&p1->num);
printf("請再次輸入成績\n");
scanf("%d%d%d%d%d",&p1->math,&p1->chinese,&p1->english,&p1->computer,&p1->PE);
p1->ave=(p1->math+p1->chinese+p1->english+p1->computer+p1->PE)/5;
p1->sum=p1->math+p1->chinese+p1->english+p1->computer+p1->PE;
p2=p1;
p1=(struct student *)malloc(sizeof(struct student));
p2->next=p1;
printf("請再次輸入資訊:\n");
scanf("%s",&p1->name);
}
t=p2;
p2->next=NULL;
sort();
/*for(p1=h;p1!=NULL;p1=p1->next)
{
printf("%s\n",p1->name);
}*/
}
void show1()
{
student *p;
for(p=h; p!=NULL; p=p->next)
{
printf(" 姓名:%s 性別:%s 學號:%d\n",p->name,p->sex,p->num);
printf(" 數學:%d 語文:%d 英語:%d 計算機:%d 體育:%d\n",p->math,p->chinese,p->english,p->computer,p->PE);
printf(" 總成績: %d 平均成績: %.2f 排名:%d\n\n",p->sum,p->ave,p->rank);
}
}
void sw(student *x,student *y)
{
swap(x->name,y->name);
swap(x->sex,y->sex);
swap(x->num,y->num);
swap(x->math,y->math);
swap(x->english,y->english);
swap(x->chinese,y->chinese);
swap(x->computer,y->computer);
swap(x->ave,y->ave);
swap(x->PE,y->PE);
swap(x->sum,y->sum);
swap(x->rank,y->rank);
}
void sort()//名次遞增
{
student *p,*q,*m;
int maxx;
for(p=h; p!=NULL; p=p->next)
{
maxx=p->sum;
for(q=p->next; q!=NULL; q=q->next)
{
if(q->sum>maxx)
{
maxx=q->sum;
m=q;
}
}
if(maxx>p->sum)
sw(p,m);
}
int ip=1;
for(p=h; p!=NULL; p=p->next)
{
p->rank=ip++;
}
}
void sort3()//名次遞減
{
student *p,*q,*m;
int maxx;
for(p=h; p!=NULL; p=p->next)
{
maxx=p->sum;
for(q=p->next; q!=NULL; q=q->next)
{
if(q->sum<maxx)
{
maxx=q->sum;
m=q;
}
}
if(maxx<p->sum)
sw(p,m);
}
}
void sort1()//學號遞減
{
student *p,*q,*m;
int maxx;
for(p=h; p!=NULL; p=p->next)
{
maxx=p->num;
for(q=p->next; q!=NULL; q=q->next)
{
if(q->num<maxx)
{
maxx=q->num;
m=q;
}
}
if(maxx<p->num)
sw(p,m);
}
}
void sort2()//學號遞增
{
student *p,*q,*m;
int maxx;
for(p=h; p!=NULL; p=p->next)
{
maxx=p->num;
for(q=p->next; q!=NULL; q=q->next)
{
if(q->num>maxx)
{
maxx=q->num;
m=q;
}
}
if(maxx>p->num)
sw(p,m);
}
}
void sort5()//姓名遞增
{
student *p,*q,*m;
char maxx[30];
for(p=h; p!=NULL; p=p->next)
{
memset(maxx,0,sizeof(maxx));
strcpy(maxx,p->name);
for(q=p->next; q!=NULL; q=q->next)
{
if(strcmp(maxx,q->name)>0)
{
memset(maxx,0,sizeof(maxx));
strcpy(maxx,q->name);
m=q;
}
}
if(strcmp(maxx,p->name)<0)
sw(p,m);
}
}
void sort6()//姓名遞減
{
student *p,*q,*m;
char maxx[30];
for(p=h; p!=NULL; p=p->next)
{
memset(maxx,0,sizeof(maxx));
strcpy(maxx,p->name);
for(q=p->next; q!=NULL; q=q->next)
{
if(strcmp(maxx,q->name)<0)
{
memset(maxx,0,sizeof(maxx));
strcpy(maxx,q->name);
m=q;
}
}
if(strcmp(maxx,p->name)>0)
sw(p,m);
}
}
void show()
{
student *p;
p=h;
// printf("%d\n",h->num);
//printf("%d\n",p->num);
printf("按學號查詢請輸入1,按姓名查詢請輸入2,按名次查詢請輸入3\n");
int x,y;
scanf("%d",&x);
if(x==1)
{
printf("請輸入學號: ");
scanf("%d",&y);
p=h;
while(y!=p->num)
{
p=p->next;
}
}
else if(x==3)
{
printf("請輸入名次: ");
scanf("%d",&y);
p=h;
while(y!=p->rank)
{
p=p->next;
}
}
else
{
printf("請輸入姓名: ");
char s[20];
scanf("%s",s);
p=h;
while(strcmp(s,p->name))
{
p=p->next;
}
}
printf("\n查詢結果如下:\n");
printf(" 姓名:%s 性別:%s 學號:%d\n",p->name,p->sex,p->num);
printf(" 數學:%d 語文:%d 英語:%d 計算機:%d 體育:%d\n",p->math,p->chinese,p->english,p->computer,p->PE);
printf(" 總成績: %d 平均成績: %.2f 排名:%d\n\n",p->sum,p->ave,p->rank);
}
void create_file()
{
FILE *fp;
student *p;
fp=fopen("d:\\data.txt","w");
p=h;
while(1)
{
fprintf(fp,"%s %s %d %d %d %d %d %d %.2f %d %d\n",p->name,p->sex,p->num,p->math,p->chinese,p->english,p->computer,p->PE,p->ave,p->sum,p->rank);
if(p->next==NULL)
break;
p=p->next;
}
fclose(fp);
}
void read_file()
{
FILE *fp;
student *p1,*p2;
fp=fopen("d:\\data.txt","r");
int d=1;
h=p2=(struct student *)malloc(sizeof(struct student));
fscanf(fp,"%s %s %d %d %d %d %d %d %lf %d %d\n",p2->name,p2->sex,&p2->num,&p2->math,&p2->chinese,&p2->english,&p2->computer,&p2->PE,&p2->ave,&p2->sum,&p2->rank);
while(!feof(fp))
{
p1=(struct student *)malloc(sizeof(struct student));
fscanf(fp,"%s %s %d %d %d %d %d %d %lf %d %d\n",p1->name,p1->sex,&p1->num,&p1->math,&p1->chinese,&p1->english,&p1->computer,&p1->PE,&p1->ave,&p1->sum,&p1->rank);
p2->next=p1;
p2=p1;
}
p2->next=NULL;
fclose(fp);
}
void delet()
{
student *p,*q;
printf("請輸入要刪除學生的學號:\n");
int x;
scanf("%d",&x);
int flag=1;
if(h->num==x)
{
h=h->next;
for(p=h;p!=NULL;p=p->next)
--(p->rank);
return;
}
else
{
for(p=h; p->next!=NULL; p=p->next)
{
if(p->next->num==x)
{
flag=0;
break;
}
}
if(flag)
{
printf("對不起,沒有該學生!\n");
}
else
{
if(p->next->next==NULL)
{
p->next=NULL;
return;
}
p->next=p->next->next;
for(p=p->next;p->next!=NULL; p=p->next)
p->rank=p->rank-1;
}
}
}
void add()
{
printf("溫馨提示: 請注意一次只能新增加一個學生,若增加多個請在主選單再次選擇“1” :)\n\n");
student *p1,*p;
int x;
for(p=h;p!=NULL;p=p->next)
t=p;
p1=(struct student *)malloc(sizeof(struct student));
t->next=p1;
printf("請輸入資訊(輸入0,結束輸入):(例如:lvshubao man 20130000)\n");
scanf("%s",&p1->name);
scanf("%s%d",&p1->sex,&p1->num);
printf("請輸入成績依次是:math,chinese,english,computer,PE\n");
scanf("%d%d%d%d%d",&p1->math,&p1->chinese,&p1->english,&p1->computer,&p1->PE);
p1->next=NULL;
// printf("%d\n",h->num);
// printf("%d\n",p1->num);
p1->ave=(p1->math+p1->chinese+p1->english+p1->computer+p1->PE)/5;
p1->sum=p1->math+p1->chinese+p1->english+p1->computer+p1->PE;
sort();
}
void xiugai()
{
student *p,*q,*p1;
printf("請輸入要修改學生的學號:\n");
int x;
scanf("%d",&x);
int flag=1;
for(p=h; p!=NULL; p=p->next)
{
if(p->num==x)
{
flag=0;
break;
}
}
if(flag)
{
printf("對不起,沒有該學生!\n");
}
else
{
p1=p;
printf("重新輸入該學生的資訊(例如:lvshubao man 20130000)\n\n");
scanf("%s",&p1->name);
scanf("%s%d",&p1->sex,&p1->num);
printf("請輸入成績依次是:math,chinese,english,computer,PE\n");
scanf("%d%d%d%d%d",&p1->math,&p1->chinese,&p1->english,&p1->computer,&p1->PE);
p1->ave=(p1->math+p1->chinese+p1->english+p1->computer+p1->PE)/5;
p1->sum=p1->math+p1->chinese+p1->english+p1->computer+p1->PE;
}
}
int main()
{
start();
int x;
int flag;
printf("您當前的位置是主選單,請輸入您所需要的操作所對應的數字:\n");
while(~scanf("%d",&x))
{
flag=1;
if(x==1)
add();
else if(x==2)
show1();
else if(x==3)
xiugai();
else if(x==4)
show();
else if(x==5)
delet();
else if(x==6)
{
printf("請根據提示選擇您想要的排序要求:\n");
cout<<endl<<" 學號升序----------------1 學號降序----------------2"<<endl;
cout<<endl<<" 名次降序----------------3 名次升序----------------4"<<endl;
cout<<endl<<" 姓名升序----------------5 姓名降序----------------6"<<endl;
int y;
scanf("%d",&y);
if(y==1)
sort1();
else if(y==2)
sort2();
else if(y==3)
sort3();
else if(y==4)
sort();
else if(y==5)
sort5();
else if(y==6)
sort6();
else
{
printf("輸入錯誤,將返回主選單!\n");
}
}
else if(x==7)
create_file();
else if(x==8)
read_file();
else if(x==9)
creatLink();
else if(x==10)
break;
else
{
printf("輸入有誤,請重新輸入!\n");
flag=0;
continue;
}
if(flag==1)
printf("您當前的位置是主選單,請輸入您所需要的操作所對應的數字:\n");
}
return 0;
}
本文__Yran原創,轉載請標明出處
相關文章
- C語言學生管理系統原始碼C語言原始碼
- 基於陣列的學生管理系統【C語言版】陣列C語言
- 學生資訊管理系統用例
- 學生選題資訊管理系統
- 【C++】學生管理系統C++
- 基於php學生資訊管理系統PHP
- Java簡單學生資訊管理系統Java
- 教你如何運用python實現學生資訊管理系統Python
- python實現學生資訊管理系統(從淺到深)Python
- C++實現控制檯學生學籍管理系統C++
- C語言課程訓練系統題-字串cquptC語言字串
- 某學校的學生資訊管理系統網站網站
- c語言圖書館管理系統----學會使用結構體C語言結構體
- C語言-超市倉庫管理系統的設計與實現C語言
- C語言實戰!!!:商城系統模擬C語言
- Python編寫簡單的學生資訊管理系統Python
- C語言實現通訊錄管理系統(結構體、列舉、聯合體應用)C語言結構體
- 資訊學奧賽--C語言筆記(一)C語言筆記
- java+SQL做學生資訊管理系統(增刪改查)學生新作JavaSQL
- 創新實訓(八)使用者管理和系統資訊
- 學生管理系統
- 資料結構 課程設計 員工管理系統(C語言)資料結構C語言
- C語言 16 系統庫C語言
- 教你如何用python實現學生通訊錄管理系統Python
- Python專案開發案例(一)————學生資訊管理系統Python
- Python學生資訊管理系統-簡易版(Python基礎)Python
- C語言實現TCP通訊C語言TCP
- C# 簡單的學生資訊管理系統,好看的UI介面,與資料庫互動C#UI資料庫
- 通訊錄管理系統(C++實現)C++
- 醫學實驗室資訊管理系統原始碼原始碼
- 學生管理系統(springMVC)SpringMVC
- 基於jsp學生資訊管理系統的設計與實現(含原始檔)JS
- 基於java的大學生健康資訊管理系統的設計與實現Java
- Java入門專案:學生資訊管理系統V1Java
- [原始碼和文件分享]基於C語言實現的家譜管理系統原始碼C語言
- 如何系統學習C 語言(上)之 基礎篇
- 如何系統學習C 語言(下)之 檔案篇
- C語言實用演算法系列之學生管理系統_對整個結構體操作_氣泡排序_提取排序規則C語言演算法結構體排序
- C語言學習方法,怎麼學習C語言?C語言