?? kao7.cpp
字號:
#include <stdio.h>
#include <stdlib.h>
#include<string.h> //提供字符串比較函數:strcmp()
#include<fstream.h> //文件控制頭函數
//*********************學生成績信息定義**************************
typedef struct examine
{
float math;
float english;
float suanfa;
float huibian;
float dianlu;
float tiyu;
float pingjun;
float total;
}Exam;
//**********************學生課程信息定義**************************
typedef struct course
{
char mon1[10],mon2[10],mon3[10],mon4[10],mon5[10];
char tues1[10],tues2[10],tues3[10],tues4[10],tues5[10];
char wed1[10],wed2[10],wed3[10],wed4[10],wed5[10];
char thur1[10],thur2[10],thur3[10],thur4[10],thur5[10];
char fri1[10],fri2[10],fri3[10],fri4[10],fri5[10];
}Cour;
//*********************學生學籍信息定義**************************
typedef struct stud
{
long xuehao;
char name[10];
char sex[5];
char xibie[10];
char banji[10];
char address[40];
char tel[10];
char sushe[10];
Exam chengji; //內嵌聲明成績信息結構體
Cour kecheng; //內嵌聲明課程信息結構體
struct stud * next;
}Stud;
Stud *head; //定義鏈表頭結點指針(全局變量)
Stud *r,*R,*w; //定義從鏈表任意段控制輸出的指針(全局變量)
FILE *fi1,*fi2; //聲明文件操作變量指針(全局變量)
//******************************函數聲明部分***************************************
void caidan(); //
void caidan1();
void caidan2();
void caidan3();
void caidan4();
void caidan5();
void caidan6(); //六個菜單函數
void xuehaoDel(long x); //按學號刪除函數
void nameDel(char x[]); //按姓名刪除函數
void shuru(); //輸入基本信息和成績函數
void shuru1(); //輸入課表信息函數
void inser(long b); //錄入,插入新學生信息函數
void print(); //
void print2();
void print3();
void print4(); //四個控制打印信息函數
void output();
void output1();
void output2(); //三類信息的打印函數
void paixu(); //按學號排序函數
void paixu1(); //按考試成績排序函數
void find(long b); //按學號查找函數
void find1(char b[10]); //按姓名查找函數
void open(); //打開信息庫文件輸出信息函數
void close(); //保存信息到信息庫文件函數
void gengxin(long b); //更新學生信息函數
int tongji(); //統計學生信息個數函數
//*********************主函數定義**************************
void main() //主函數開始
{
char name[10];
int choose,choose1,n,menu=1; //定義三個控制循環的變量
long m; //定義用來做學號查詢的變量
open(); //打開信息庫文件載入學生信息
do //循環操作控制
{
if(menu==1) //判斷是否重新顯示主菜單
caidan(); //調用功能菜單函數,顯示菜單項。
menu=1; //默認從個子功能模塊跳出后自動顯示主菜單
printf("請選擇>>");
scanf("%ld",&choose);
switch(choose)
{
case 1: //進入錄入,插入新學生信息功能模塊
system("cls"); //自動清屏函數(系統提供)
caidan3(); //調用子菜單
do //連續插入新信息循環控制
{
printf("請輸入新學生學號:\n");
scanf("%ld",&m);
inser(m); //調用插入新的學生信息的函數;
print(); //顯示插入的新學生信息
printf("\n繼續插入請輸入1返回總菜單輸入0:");
scanf("%d",&m);
}while(m==1);
system("cls"); //自動清屏函數(系統提供)
break;
case 2: //進入按學號升序排序輸出信息功能模塊
system("cls"); ////自動清屏函數(系統提供)
caidan4(); //調用輸出哪類信息子菜單
n=tongji(); //調用統計函數
paixu(); //調用按學號排序函數
do //控制,實現循環查詢功能
{
printf("\n請選擇>>");
scanf("%d",&choose1);
switch(choose1)
{
case 1:
printf("一共有%d個學生,信息如下:\n",n);
print2(); //調用打印學生基本信息函數
break;
case 2:
printf("一共有%d個學生,成績信息如下:\n",n);
print3(); //調用打印學生成績信息函數
break;
case 3:
printf("一共有%d個學生,信息如下:\n",n);
print4(); //調用打印學生課程信息函數
break;
default:
printf("\n選擇錯誤,請重新選擇!\n");
break;
}
}while(choose1!=0);
system("cls");//自動清屏函數(系統提供)
menu=1;
break;
case 3: //進入學生考試成績排名功能模塊
n=tongji(); //調用統計函數
printf("一共有%d個學生,分數從高到低排列如下:\n",n);
paixu1(); //調用成績排名函數
print3(); //調用打印學生成績函數
menu=0; //控制跳出后不必再顯示主菜單
break;
case 4: //進入查詢學生信息功能模塊
system("cls"); ////自動清屏函數(系統提供)
do // 控制循環查詢信息
{
caidan1(); //調用查詢功能子菜單
printf("\n請選擇>>");
scanf("%d",&choose1);
switch(choose1)
{
case 1: //按學號查詢信息
do //控制循環查詢
{
printf("請輸入你要查找的學號:");
scanf("%ld",&m);
find(m); //調用按學號查詢信息函數
printf("\n繼續查找請輸入1:\n返回上級菜單輸入0:\n");
scanf("%d",&m);
}while(m==1);
system("cls"); ////自動清屏函數(系統提供)
break;
case 2: //按姓名查詢信息
do //控制循環查詢
{
printf("請輸入你要查找的姓名:");
scanf("%s",name);
find1(name); //調用按姓名查詢學生信息函數
printf("\n繼續查找請輸入1\n返回上級菜單輸入0:\n");
scanf("%d",&m);
}while(m==1);
system("cls"); ////自動清屏函數(系統提供)
break;
default:
printf("\n選擇錯誤,請重新選擇!\n");
break;
}
}while(choose1!=0);
system("cls"); ////自動清屏函數(系統提供)
break;
case 5: //進入統計學生信息個數功能模塊
n=tongji(); //調用統計個數函數
printf("數據庫中一共有%d個學生信息.\n",n);
printf("\n");
menu=0; //控制跳出后不必再顯示主菜單
break;
case 6: //進入更新信息功能模塊
system("cls"); ////自動清屏函數(系統提供)
caidan6(); //調用更新功能子菜單函數
do // 控制循環更新修改學生信息
{
printf("\n\n請輸入要更新修改信息的學生學號:");
scanf("%ld",&m);
gengxin(m); //調用更新信息函數
printf("\n繼續更新請輸入1返回總菜單輸入0:");
scanf("%d",&m);
menu=1; //控制跳出后重新顯示主菜單
}while(m==1);
system("cls"); ////自動清屏函數(系統提供)
break;
case 7: //進入刪除學生信息功能模塊
system("cls"); ////自動清屏函數(系統提供)
caidan2(); //調用刪除信息子菜單
do //控制循環刪除信息
{
printf("\n請選擇>>");
scanf("%d",&choose1);
switch(choose1)
{
case 1: //按學號刪除信息
do //控制循環按學號刪除信息
{
printf("請輸入要刪除的學生學號:");
scanf("%ld",&m);
xuehaoDel(m); //調用按學號刪除信息函數
printf("\n繼續刪除請輸入1\n返回總菜單輸入0:");
scanf("%d",&m);
}while(m==1);
system("cls"); ////自動清屏函數(系統提供)
break;
case 2: //按姓名刪除信息
do //控制循環按姓名刪除
{
printf("請輸入要刪除的學生姓名:");
scanf("%s",name);
nameDel(name); //調用按姓名刪除信息函數
printf("\n繼續刪除請輸入1\n返回總菜單輸入0:");
scanf("%d",&m);
}while(m==1);
system("cls"); ////自動清屏函數(系統提供)
break;
case 3: //全部刪除信息
printf("確定全部刪除請輸入:1 (刪除后再保存將不能恢復!)\n放棄刪除請輸入:0\n");
scanf("%d",&choose1);
if(choose1==1)
{
head->next=NULL;
printf("\n全部刪除成功!");
}
break;
default:
printf("\n選擇錯誤,請重新選擇!\n");
break;
}
}while(choose1!=0);
system("cls"); ////自動清屏函數(系統提供)
break;
default:
printf("\n選擇錯誤,請重新選擇!\n");
break;
}
}while(choose!=0);
close(); //調用保存信息進庫文件函數
printf("\n *** !數據保存成功! ***\n");
printf("感謝使用!請按任意鍵退出!\n"); //**********************結束程序運行!
}
//******************************插入函數************************************
void inser(long b)
{
Stud *q;
q=head->next;
while(q!=NULL&&b!=q->xuehao) //檢查是否存已在該同學
q=q->next;
r=q;
if(!q) //如果還沒存在該同學就添加進信息庫
{
r=head;
while(r->next!=NULL) //找到鏈表的尾結點
r=r->next;
while(b>0)
{
R=(Stud *)malloc(sizeof(Stud)); //申請一個新結點
R->xuehao=b;
shuru(); //調用輸入信息函數
R->next=NULL;
r->next=R;
r=r->next;
b=-1; //控制循環
printf("!插入成功!具體信息如下:\n");
}
}
else
printf("信息庫中已存在該同學!\n");
}
//***************************輸出單條信息*******************************************
void print()
{
w=r;
if(w!=NULL)
{
printf("\n學號 姓名 性別 系別 班級 宿舍 電話 家庭地址 \n");
output(); //調用輸出學籍基本信息函數
printf("\n考試成績: 高數 英語 算法 匯編 電路 體育 總分 平均分 \n");
printf(" ");
output1(); //調用輸出成績信息函數
printf("\n\n課表信息: 星期一 星期二 星期三 星期四 星期五\n");
output2(); //調用輸出課表信息函數
}
printf("\n");
}
//****************************輸出全部信息**********************************
void print2()
{
Stud *q=head;
printf("\n學號 姓名 性別 系別 班級 宿舍 電話 家庭地址 \n");
w=head->next;
while (w!=NULL)
{
output(); //調用輸出學籍基本信息函數
w=w->next; //指向下一個結點準備輸出下一個同學的信息
}
printf("\n");
}
//****************************輸出成績信息*************************************
void print3()
{
printf("\n學號 姓名 班級 高數 英語 算法 匯編 電路 體育 總分 平均分 \n");
w=head->next;
while (w!=NULL)
{
printf("%-6ld%-6s %-4s ",w->xuehao,w->name,w->banji);
output1();//調用輸出成績信息函數
printf("\n");
w=w->next; //指向下一個結點準備輸出下一個同學的信息
}
printf("\n");
}
//*****************************輸出課表信息****************************************
void print4()
{
w=head->next;
while (w!=NULL)
{ printf("\n學號: %ld 姓名: %s 班級:%s\n",w->xuehao,w->name,w->banji);
printf("\n課表信息: 星期一 星期二 星期三 星期四 星期五\n");
output2(); //調用輸出課表信息函數
printf("\n");
w=w->next; //指向下一個結點準備輸出下一個同學的信息
}
printf("\n");
}
//****************************按學號升序排序****************************************
void paixu() //按學號排序
{
Stud *H,*L,*P;
int i,j,flag,n;
n=tongji(); //調用統計個數函數
for(i=0;i<n-1;i++)
{
flag=0; //退出控制符
H=head;
L=H->next;
P=L->next;
for(j=1;j<n-i;j++)
{
if(L->xuehao>P->xuehao) //如果當前結點同學學號大于下個結點學號則通過指針調換前后順序
{
H->next=P;
L->next=P->next;
P->next=L;
flag=flag+1;
}
H=H->next;
L=H->next;
P=L->next;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -