欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

c語言mensed函數(shù) c語言meset函數(shù)

用c語言編寫學(xué)生管理系統(tǒng),

#includestdio.h /*引用庫函數(shù)*/

創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),樂平企業(yè)網(wǎng)站建設(shè),樂平品牌網(wǎng)站建設(shè),網(wǎng)站定制,樂平網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,樂平網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

#includestdlib.h

#includectype.h

#includestring.h

typedef struct /*定義結(jié)構(gòu)體數(shù)組*/

{

char num[10]; /*學(xué)號*/

char name[20]; /*姓名*/

int score; /*成績*/

}Student;

Student stu[80]; /*結(jié)構(gòu)體數(shù)組變量*/

int menu_select() /*菜單函數(shù)*/

{

char c;

do{

system("cls"); /*運行前清屏*/

printf("\t\t****Students' Grade Management System****\n"); /*菜單選擇*/

printf("\t\t | 1. Input Records |\n");

printf("\t\t | 2. Display All Records |\n");

printf("\t\t | 3. Sort |\n");

printf("\t\t | 4. Insert a Record |\n");

printf("\t\t | 5. Delete a Record |\n");

printf("\t\t | 6. Query |\n");

printf("\t\t | 7. Statistic |\n");

printf("\t\t | 8. Add Records from a Text File|\n");

printf("\t\t | 9. Write to a Text file |\n");

printf("\t\t | 0. Quit |\n");

printf("\t\t*****************************************\n");

printf("\t\t\tGive your Choice(0-9):");

c=getchar(); /*讀入選擇*/

}while(c'0'||c'9');

return(c-'0'); /*返回選擇*/

}

int Input(Student stud[],int n) /*輸入若干條記錄*/

{int i=0;

char sign,x[10]; /*x[10]為清除多余的數(shù)據(jù)所用*/

while(sign!='n'sign!='N') /*判斷*/

{ printf("\t\t\tstudent's num:"); /*交互輸入*/

scanf("\t\t\t%s",stud[n+i].num);

printf("\t\t\tstudent's name:");

scanf("\t\t\t%s",stud[n+i].name);

printf("\t\t\tstudent's score:");

scanf("\t\t\t%d",stud[n+i].score);

gets(x); /*清除多余的輸入*/

printf("\t\t\tany more records?(Y/N)");

scanf("\t\t\t%c",sign); /*輸入判斷*/

i++;

}

return(n+i);

}

void Display(Student stud[],int n) /*顯示所有記錄*/

{

int i;

printf("\t\t\t-----------------------------------\n"); /*格式頭*/

printf("\t\t\tnumber name score\n");

printf("\t\t\t-----------------------------------\n");

for(i=1;in+1;i++) /*循環(huán)輸入*/

{

printf("\t\t\t%-16s%-15s%d\n",stud[i-1].num,stud[i-1].name,stud[i-1].score);

if(i1i%10==0) /*每十個暫停*/

{printf("\t\t\t-----------------------------------\n"); /*格式*/

printf("\t\t\t");

system("pause");

printf("\t\t\t-----------------------------------\n");

}

}

printf("\t\t\t");

system("pause");

}

void Sort_by_num(Student stud[],int n) /*按學(xué)號排序*/

{ int i,j,*p,*q,s;

char t[10];

for(i=0;in-1;i++) /*冒泡法排序*/

for(j=0;jn-1-i;j++)

if(strcmp(stud[j].num,stud[j+1].num)0)

{strcpy(t,stud[j+1].num);

strcpy(stud[j+1].num,stud[j].num);

strcpy(stud[j].num,t);

strcpy(t,stud[j+1].name);

strcpy(stud[j+1].name,stud[j].name);

strcpy(stud[j].name,t);

p=stud[j+1].score;

q=stud[j].score;

s=*p;

*p=*q;

*q=s;

}

}

int Insert_a_record(Student stud[],int n) /*插入一條記錄*/

{char x[10]; /*清除多余輸入所用*/

printf("\t\t\tstudent's num:"); /*交互式輸入*/

scanf("\t\t\t%s",stud[n].num);

printf("\t\t\tstudent's name:");

scanf("\t\t\t%s",stud[n].name);

printf("\t\t\tstudent's score:");

scanf("\t\t\t%d",stud[n].score);

gets(x);

n++;

Sort_by_num(stud,n); /*調(diào)用排序函數(shù)*/

printf("\t\t\tInsert Successed!\n"); /*返回成功信息*/

return(n);

}

int Delete_a_record(Student stud[],int n) /*按姓名查找,刪除一條記錄*/

{ char s[20];

int i=0,j;

printf("\t\t\ttell me his(her) name:"); /*交互式問尋*/

scanf("%s",s);

while(strcmp(stud[i].name,s)!=0in) i++; /*查找判斷*/

if(i==n)

{ printf("\t\t\tnot find!\n"); /*返回失敗信息*/

return(n);

}

for(j=i;jn-1;j++) /*刪除操作*/

{

strcpy(stud[j].num,stud[j+1].num);

strcpy(stud[j].name,stud[j+1].name);

stud[j].score=stud[j+1].score;

}

printf("\t\t\tDelete Successed!\n"); /*返回成功信息*/

return(n-1);

}

void Query_a_record(Student stud[],int n) /*查找并顯示一個記錄*/

{ char s[20];

int i=0;

printf("\t\t\tinput his(her) name:"); /*交互式輸入*/

scanf("\t\t\t%s",s);

while(strcmp(stud[i].name,s)!=0in) i++; /*查找判斷*/

if(i==n)

{ printf("\t\t\tnot find!\n"); /*輸入失敗信息*/

return;

}

printf("\t\t\this(her) number:%s\n",stud[i].num); /*輸出該學(xué)生信息*/

printf("\t\t\this(her) score:%d\n",stud[i].score);

}

void Statistic(Student stud[],int n) /*新增功能,輸出統(tǒng)計信息*/

{ int i,j=0,k=0,sum=0;

float aver; /*成績平均值*/

for(i=0;in;i++) /*循環(huán)輸入判斷*/

{

sum+=stud[i].score;

if(stud[j].scorestud[i].score) j=i;

if(stud[k].scorestud[i].score) k=i;

}

aver=1.0*sum/n;

printf("\t\t\tthere are %d records.\n",n); /*總共記錄數(shù)*/

printf("\t\t\tthe hignest score:\n"); /*最高分*/

printf("\t\t\tnumber:%s name:%s score:%d\n",stud[j].num,stud[j].name,stud[j].score);

printf("\t\t\tthe lowest score:\n"); /*最低分*/

printf("\t\t\tnumber:%s name:%s score:%d\n",stud[k].num,stud[k].name,stud[k].score);

printf("\t\t\tthe average score is %5.2f\n",aver); /*平均分*/

}

int AddfromText(Student stud[],int n) /*從文件中讀入數(shù)據(jù)*/

{ int i=0,num;

FILE *fp; /*定義文件指針*/

char filename[20]; /*定義文件名*/

printf("\t\t\tInput the filename:");

scanf("\t\t\t%s",filename); /*輸入文件名*/

if((fp=fopen(filename,"rb"))==NULL) /*打開文件*/

{ printf("\t\t\tcann't open the file\n"); /*打開失敗信息*/

printf("\t\t\t");

system("pause");

return(n);

}

fscanf(fp,"%d",num); /*讀入總記錄量*/

while(inum) /*循環(huán)讀入數(shù)據(jù)*/

{

fscanf(fp,"%s%s%d",stud[n+i].num,stud[n+i].name,stud[n+i].score);

i++;

}

n+=num;

fclose(fp); /*關(guān)閉文件*/

printf("\t\t\tSuccessed!\n");

printf("\t\t\t");

system("pause");

return(n);

}

void WritetoText(Student stud[],int n) /*將所有記錄寫入文件*/

{

int i=0;

FILE *fp; /*定義文件指針*/

char filename[20]; /*定義文件名*/

printf("\t\t\tWrite Records to a Text File\n"); /*輸入文件名*/

printf("\t\t\tInput the filename:");

scanf("\t\t\t%s",filename);

if((fp=fopen(filename,"w"))==NULL) /*打開文件*/

{

printf("\t\t\tcann't open the file\n");

system("pause");

return;

}

fprintf(fp,"%d\n",n); /*循環(huán)寫入數(shù)據(jù)*/

while(in)

{

fprintf(fp,"%-16s%-15s%d\n",stud[i].num,stud[i].name,stud[i].score);

i++;

}

fclose(fp); /*關(guān)閉文件*/

printf("Successed!\n"); /*返回成功信息*/

}

void main() /*主函數(shù)*/

{

int n=0;

for(;;)

{

switch(menu_select()) /*選擇判斷*/

{

case 1:

printf("\t\t\tInput Records\n"); /*輸入若干條記錄*/

n=Input(stu,n);

break;

case 2:

printf("\t\t\tDisplay All Records\n"); /*顯示所有記錄*/

Display(stu,n);

break;

case 3:

printf("\t\t\tSort\n");

Sort_by_num(stu,n); /*按學(xué)號排序*/

printf("\t\t\tSort Suceessed!\n");

printf("\t\t\t");

system("pause");

break;

case 4:

printf("\t\t\tInsert a Record\n");

n=Insert_a_record(stu,n); /*插入一條記錄*/

printf("\t\t\t");

system("pause");

break;

case 5:

printf("\t\t\tDelete a Record\n");

n=Delete_a_record(stu,n); /*按姓名查找,刪除一條記錄*/

printf("\t\t\t");

system("pause");

break;

case 6:

printf("\t\t\tQuery\n");

Query_a_record(stu,n); /*查找并顯示一個記錄*/

printf("\t\t\t");

system("pause");

break;

case 7:

printf("\t\t\tStatistic\n");

Statistic(stu,n); /*新增功能,輸出統(tǒng)計信息*/

printf("\t\t\t");

system("pause");

break;

case 8:

printf("\t\t\tAdd Records from a Text File\n");

n=AddfromText(stu,n); /*新增功能,輸出統(tǒng)計信息*/

break;

case 9:

printf("\t\t\tWrite to a Text file\n");

WritetoText(stu,n); /*循環(huán)寫入數(shù)據(jù)*/

printf("\t\t\t");

system("pause");

break;

case 0:

printf("\t\t\tHave a Good Luck,Bye-bye!\n"); /*結(jié)束程序*/

printf("\t\t\t");

system("pause");

exit(0);

}

}

}

C語言程序設(shè)計 鏈表的綜合操作(急)

一、課程設(shè)計與目的

根據(jù)課堂講授內(nèi)容,學(xué)生做相應(yīng)的自主練習(xí),消化課堂所講解的內(nèi)容;通過調(diào)試典型例題或習(xí)題積累調(diào)試C程序的經(jīng)驗;通過完成輔導(dǎo)教材中的編程題,逐漸培養(yǎng)學(xué)生的編程能力、用計算機解決實際問題的能力。

二、課程設(shè)計基本要求

1、用數(shù)據(jù)結(jié)構(gòu)的方法設(shè)計出的學(xué)生信息管理系統(tǒng),能實現(xiàn)對學(xué)生信息的簡單管理。

2、具體要求:

建立一個若干學(xué)生的信息登記表,每個學(xué)生的信息包括:學(xué)號、姓名、性別、成績和系,建立一個管理系統(tǒng)。

程序運行時顯示一個菜單形式,例如

**********學(xué)生信息管理系統(tǒng)**********

| 1. 輸入信息 |

| 2. 顯示所有信息|

| 3. 信息按學(xué)號排序|

| 4. 插入一條記錄|

| 5. 刪除一條記錄|

| 6. 查找 |

| 7. 修改一條記錄 |

| 8. 退出 |

其中:

(1)輸入若干條記錄

(2)顯示所有記錄

(3)按學(xué)號排序

(4)插入一些記錄

(5)按學(xué)號查找,刪除一條記錄

(6)查找并顯示一條記錄

(7)修改一條記錄

(8)退出程序

三、系統(tǒng)功能和結(jié)構(gòu)

1、系統(tǒng)的功能

1設(shè)計一個簡單學(xué)生信息管理系統(tǒng),用戶可以通過系統(tǒng)簡單的管理學(xué)生信息。

2設(shè)計出一個菜單可以讓用戶選擇所執(zhí)行的內(nèi)容。

3建立單結(jié)構(gòu)體,輸入學(xué)生的信息(學(xué)號、姓名和、性別、系和成績)。

4根據(jù)單結(jié)構(gòu)體的特點采用冒泡法以總分為標準排序?qū)W生信息。

5根據(jù)用戶輸入的學(xué)號信息,固定的查詢學(xué)生的詳細信息。

6根據(jù)用戶的需求刪除或者添加某學(xué)生的信息。

2、概要設(shè)計

主要數(shù)據(jù)結(jié)構(gòu)描述

typedef struct student //定義結(jié)構(gòu)類型

{

char num[15]; //學(xué)號

char name[20]; //姓名

char sex; //性別

int score; //成績

char sdept[10]; //系

} ;

student stu[100]; //結(jié)構(gòu)體數(shù)組變量

算法分析及程序流程圖

該項目劃分為7個模塊加退出,主函數(shù)可以分別調(diào)用這些模塊,然后通過個模塊來實現(xiàn)各種需要的功能。

四、程序如何實現(xiàn)

模塊詳細設(shè)計

根據(jù)上面的流程圖,下面分析每個模塊具體的功能,包括每個模塊的參數(shù)和得出的結(jié)果

函數(shù)名 int Input(student stu[],int n) //輸入信息

入口參數(shù) 無

返回值 無

模塊功能 建立單結(jié)構(gòu)體并賦值,即錄入學(xué)生的信息

模塊1

函數(shù)名 void Display(student stu[],int n) //顯示所有信息

入口參數(shù) 無

返回值 無

模塊功能 用于顯示和方便查找學(xué)號的學(xué)生成績

模塊2

函數(shù)名 void Sort_by_num(student stu[],int n) //對輸入的信息按學(xué)號排序

入口參數(shù) 無

返回值 無

模塊功能 用于對學(xué)生按學(xué)號排序便于查看

模塊3

函數(shù)名 int Insert_a_record(student stu[],int n) //插入一些記錄

入口參數(shù) 無

返回值 無

模塊功能 用于追加新的學(xué)生信息

模塊4

函數(shù)名 int Delete_a_record(student stu[],int n) //查找,刪除一個記錄

入口參數(shù) 無

返回值 無

模塊功能 用于刪除學(xué)生一些信息

模塊5

函數(shù)名 void Query_a_record(student stu[],int n) //查找并顯示一個記錄

入口參數(shù) 無

返回值 無

模塊功能 用于查找并顯示一個記錄

模塊6

函數(shù)名 void Replace_a_record(student stu[],int n) //按學(xué)號查找修改

入口參數(shù) 無

返回值 無

模塊功能 按學(xué)號查找并修改一個學(xué)生信息

模塊7

函數(shù)名 exit(8)

入口參數(shù) 無

返回值 無

模塊功能 退出應(yīng)用程序

模塊8

五、程序源代碼

程序正文部分

#includestdio.h

#includestdlib.h

#includectype.h

#includestring.h

typedef struct student //定義結(jié)構(gòu)類型

{

char num[15]; //學(xué)號

char name[20]; //姓名

char sex; //性別

int score; //成績

char sdept[10]; //系

} ;

student stu[100]; //結(jié)構(gòu)體數(shù)組變量

int menu_select() //菜單函數(shù)聲明

{

char c;

do{

system("cls"); /*運行前清屏*/ ;

printf("\t\t**********學(xué)生信息管理系統(tǒng)**********\n"); /*菜單選擇*/

printf("\t\t | 1. 輸入信息 |\n");

printf("\t\t | 2. 顯示所有信息|\n");

printf("\t\t | 3. 信息按學(xué)號排序|\n");

printf("\t\t | 4. 插入一條記錄|\n");

printf("\t\t | 5. 刪除一條記錄|\n");

printf("\t\t | 6. 查找 |\n");

printf("\t\t | 7. 修改一條記錄 |\n");

printf("\t\t | 8. 退出 |\n");

printf("\t\t************************************\n");

printf("\t\t\t 你的選擇是(1-8):");

c=getchar(); //你的選擇c

}while(c'1'||c'8');

return(c-'0');

}

int Input(student stu[],int n) //輸入信息

{ int i=0;

char more;

while(more!='n'more!='N')

{printf("\t\t\t 請輸入學(xué)生學(xué)號:");

scanf("\t\t\t %s",stu[n+i].num);

printf("\t\t\t 請輸入學(xué)生姓名:");

scanf("\t\t\t %s",stu[n+i].name);

printf("\t\t\t 請輸入學(xué)生性別:");

scanf("\t\t\t %c",stu[n+i].sex);

printf("\t\t\t 請輸入學(xué)生成績:");

scanf("\t\t\t %d",stu[n+i].score);

printf("\t\t\t 請輸入學(xué)生所在系:");

scanf("\t\t\t %s",stu[n+i].sdept);

printf("\t\t\t 您有更多信息要輸入嗎?Y/N:");

scanf("\t\t\t %c",more);

i++;

}return(n+i);

}

void Display(student stu[],int n) //顯示所有信息

{ int i;

printf(" ---------------------------------------------------------------\n"); /*格式頭*/

printf(" | 學(xué) 號 | 姓 名 | 性別 | 成績 | 所在系 |\n");

printf(" ---------------------------------------------------------------\n");

for(i=1;i=n;i++)

{printf(" | %-15s| %-11s| %-5c| %-6d| %-12s|\n",stu[i-1].num,stu[i-1].name,

stu[i-1].sex,stu[i-1].score,stu[i-1].sdept );

printf(" ---------------------------------------------------------------\n"); //分格行

}

printf("\t\t\t");

system("pause");

}

void Sort_by_num(student stu[],int n) //對輸入的信息按學(xué)號排序

{ int i,j;

char l[15],t[20],q,k[10];

int p;

for(i=0;i=n-1;i++) //起泡法排序

for(j=0;jn-1-i;j++)

if(strcmp(stu[j].num,stu[j+1].num)0)

{ l=stu[j].num;

stu[j].num=stu[j+1].num;

stu[j+1].num=l;

t=stu[j].name;

stu[j].name=stu[j+1].name;

stu[j+1].name=t;

q=stu[j].sex;

stu[j].sex=stu[j+1].sex;

stu[j+1].sex=q;

p=stu[j].score;

stu[j].score=stu[j+1].score;

stu[j+1].score=p;

k=stu[j].sdept;

stu[j].sdept=stu[j+1].sdept;

stu[j+1].sdept=k;

}

}

int Insert_a_record(student stu[],int n) //插入一些記錄

{ int i=0;

char more;

while(more!='n'more!='N')

{printf("\t\t\t 請輸入學(xué)生學(xué)號:");

scanf("\t\t\t %s",stu[n+i].num);

printf("\t\t\t 請輸入學(xué)生姓名:");

scanf("\t\t\t %s",stu[n+i].name);

printf("\t\t\t 請輸入學(xué)生性別:");

scanf("\t\t\t %c",stu[n+i].sex);

printf("\t\t\t 請輸入學(xué)生成績:");

scanf("\t\t\t %d",stu[n+i].score);

printf("\t\t\t 請輸入學(xué)生所在系:");

scanf("\t\t\t %s",stu[n+i].sdept);

Sort_by_num(stu, n);

printf("\t\t\t Insert Successed!\n"); //插入成功

printf("\t\t\t 您有更多信息要輸入嗎?Y/N:");

scanf("\t\t\t %c",more);

i++;

}return(n+i);

}

int Delete_a_record(student stu[],int n) //查找,刪除一個記錄

{ char l[15];

int i=0, j;

printf("\t\t\t 請輸入學(xué)生學(xué)號:"); //按學(xué)號查找

scanf("\t\t\t %s",l);

while(strcmp(stu[i].num,l)!=0 in)i++; //查找判斷

if(i==n)

{printf("\t\t\tnot find!\n"); //查找失敗

return(n);}

for(j=i;jn-1;j++) //刪除操作

{ strcpy(stu[j].num,stu[j+1].num);

strcpy(stu[j].name,stu[j+1].name);

stu[j].sex=stu[j+1].sex;

stu[j].score=stu[j+1].score;

strcpy(stu[j].sdept,stu[j+1].sdept);

}

printf("\t\t\t Delete Successed!\n"); //刪除成功

return(n-1) ;

}

void Query_a_record(student stu[],int n) //查找并顯示一個記錄

{ char l[15];

int i=0;

printf("\t\t\t 請輸入學(xué)生學(xué)號:"); //按學(xué)號查找

scanf("\t\t\t %s",l);

while(strcmp(stu[i].num,l)!=0 in)i++; //查找判斷

if(i==n)

{ printf("\t\t\tnot find!\n"); //查找失敗

return;

}

printf("\t\t\t 學(xué)生的學(xué)號:%s\n",stu[i].num); //輸出該學(xué)生信息

printf("\t\t\t 學(xué)生的姓名:%s\n",stu[i].name);

printf("\t\t\t 學(xué)生的性別:%c\n",stu[i].sex);

printf("\t\t\t 學(xué)生的成績:%d\n",stu[i].score);

printf("\t\t\t 學(xué)生所在系:%s\n",stu[i].sdept);

}

void Replace_a_record(student stu[],int n) //按學(xué)號查找修改

{

char choice,l[15];

int i=0;

printf("\t\t\t 請輸入學(xué)生學(xué)號:"); //按學(xué)號查找

scanf("\t\t\t %s",l);

while(strcmp(stu[i].num,l)!=0 in)i++; //查找判斷

if(i==n)

{printf("\t\t\tnot find!\n"); //查找失敗

return;}

printf("\t\t\t請選擇您要修改的學(xué)生的信息內(nèi)容:\n");

printf("\t\t\t (1)修改學(xué)生姓名:\n");

printf("\t\t\t (2)修改學(xué)生性別\n:");

printf("\t\t\t (3)修改學(xué)生成績:\n");

printf("\t\t\t (4)修改學(xué)生所在系:\n");

printf("\t\t\t (5)取消 請按 5 \n");

printf("\t\t\t 請輸入您的選擇:\n");

scanf("%d", choice);

switch(choice)

{

case 1:

printf("\t\t\t 請輸入新姓名:\n");

scanf("%d", stu[i].name);

break;

case 2:

printf("\t\t\t 請輸入新性別:\n");

scanf("%s", stu[i].sex);

printf("\t\t\t");

system("pause");

break;

case 3:

printf("\t\t\t 請輸入新成績:\n");

scanf("%s", stu[i].score);

printf("\t\t\t");

system("pause");

break;

case 4:

printf("\t\t\t 請輸入新的所在系:\n");

scanf("%s", stu[i].sdept);

printf("\t\t\t");

system("pause");

break;

case 5:

printf("您選擇了取消,Bye-Bye!\n") ;

exit;

}

}

void main() //主函數(shù)

{

int n=0;

for(;;) //相當(dāng)于while(1)語句,不設(shè)初值,認為表達式2為真值,循

//環(huán)變量不增值,無終止的執(zhí)行循環(huán)

{

switch(menu_select())

{

case 1:

printf("\t\t\tInput Records\n"); //輸入若干條記錄

n=Input(stu,n);

break;

case 2:

printf("\t\t\tDisplay All Records\n"); //顯示所有記錄

Display(stu,n);

break;

case 3:

printf("\t\t\tSort\n");

Sort_by_num(stu,n); //按學(xué)號排序

printf("\t\t\tSort Suceessed!\n");

printf("\t\t\t");

system("pause");

break;

case 4:

printf("\t\t\tInsert a Record\n");

n=Insert_a_record(stu,n); //插入一些記錄

printf("\t\t\t");

system("pause");

break;

case 5:

printf("\t\t\tDelete a Record\n");

n=Delete_a_record(stu,n); //按姓名查找,刪除一條記錄

printf("\t\t\t");

system("pause");

break;

case 6:

printf("\t\t\tQuery\n");

Query_a_record(stu,n); //查找并顯示一個記錄

printf("\t\t\t");

system("pause");

break;

case 7:

printf("\t\t\treplace\n"); //修改一條信息

Replace_a_record(stu,n);

printf("\t\t\t");

system("pause");

break;

case 8:

printf("\t\t\tHave a Good Luck,Bye-bye!\n"); //結(jié)束程序

printf("\t\t\t");

system("pause");

exit(8);

}

} }

六、 程序的運行與實現(xiàn)

(1)輸入若干條記錄

(2)顯示所有記錄

(3)按學(xué)號排序

(4)插入一些記錄

(5)按學(xué)號查找,刪除一條記錄

(6)查找并顯示一條記錄

(7)修改一條記錄

(8)退出程序

C語言怎么用正則表達式

如何在C語言中巧用正則表達式

看到大家討論這方面的東西,作點貢獻聊表各位高手對這個版快的無私奉獻 :oops:

如果用戶熟悉Linux下的sed、awk、grep或vi,那么對正則表達式這一概念肯定不會陌生。由于它可以極大地簡化處理字符串時的復(fù)雜

度,因此現(xiàn)在已經(jīng)在許多Linux實用工具中得到了應(yīng)用。千萬不要以為正則表達式只是Perl、Python、Bash等腳本語言的專利,作為C語言程序

員,用戶同樣可以在自己的程序中運用正則表達式。

標準的C和C++都不支持正則表達式,但有一些函數(shù)庫可以輔助C/C++程序員完成這一功能,其中最著名的當(dāng)數(shù)Philip Hazel的Perl-Compatible Regular Expression庫,許多Linux發(fā)行版本都帶有這個函數(shù)庫。

編譯正則表達式

為了提高效率,在將一個字符串與正則表達式進行比較之前,首先要用regcomp()函數(shù)對它進行編譯,將其轉(zhuǎn)化為regex_t結(jié)構(gòu):

int regcomp(regex_t *preg, const char *regex, int cflags);

參數(shù)regex是一個字符串,它代表將要被編譯的正則表達式;參數(shù)preg指向一個聲明為regex_t的數(shù)據(jù)結(jié)構(gòu),用來保存編譯結(jié)果;參數(shù)cflags決定了正則表達式該如何被處理的細節(jié)。

如果函數(shù)regcomp()執(zhí)行成功,并且編譯結(jié)果被正確填充到preg中后,函數(shù)將返回0,任何其它的返回結(jié)果都代表有某種錯誤產(chǎn)生。

匹配正則表達式

一旦用regcomp()函數(shù)成功地編譯了正則表達式,接下來就可以調(diào)用regexec()函數(shù)完成模式匹配:

int regexec(const regex_t *preg, const char *string, size_t nmatch,regmatch_t pmatch[], int eflags);

typedef struct {

regoff_t rm_so;

regoff_t rm_eo;

} regmatch_t;

參數(shù)preg指向編譯后的正則表達式,參數(shù)string是將要進行匹配的字符串,而參數(shù)nmatch和pmatch則用于把匹配結(jié)果返回給調(diào)用程序,最后一個參數(shù)eflags決定了匹配的細節(jié)。

在調(diào)用函數(shù)regexec()進行模式匹配的過程中,可能在字符串string中會有多處與給定的正則表達式相匹配,參數(shù)pmatch就是用來保

存這些匹配位置的,而參數(shù)nmatch則告訴函數(shù)regexec()最多可以把多少個匹配結(jié)果填充到pmatch數(shù)組中。當(dāng)regexec()函數(shù)成功返

回時,從string+pmatch[0].rm_so到string+pmatch[0].rm_eo是第一個匹配的字符串,而從

string+pmatch[1].rm_so到string+pmatch[1].rm_eo,則是第二個匹配的字符串,依此類推。

釋放正則表達式

無論什么時候,當(dāng)不再需要已經(jīng)編譯過的正則表達式時,都應(yīng)該調(diào)用函數(shù)regfree()將其釋放,以免產(chǎn)生內(nèi)存泄漏。

void regfree(regex_t *preg);

函數(shù)regfree()不會返回任何結(jié)果,它僅接收一個指向regex_t數(shù)據(jù)類型的指針,這是之前調(diào)用regcomp()函數(shù)所得到的編譯結(jié)果。

如果在程序中針對同一個regex_t結(jié)構(gòu)調(diào)用了多次regcomp()函數(shù),POSIX標準并沒有規(guī)定是否每次都必須調(diào)用regfree()函

數(shù)進行釋放,但建議每次調(diào)用regcomp()函數(shù)對正則表達式進行編譯后都調(diào)用一次regfree()函數(shù),以盡早釋放占用的存儲空間。

報告錯誤信息

如果調(diào)用函數(shù)regcomp()或regexec()得到的是一個非0的返回值,則表明在對正則表達式的處理過程中出現(xiàn)了某種錯誤,此時可以通過調(diào)用函數(shù)regerror()得到詳細的錯誤信息。

size_t regerror(int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size);

參數(shù)errcode是來自函數(shù)regcomp()或regexec()的錯誤代碼,而參數(shù)preg則是由函數(shù)regcomp()得到的編譯結(jié)果,

其目的是把格式化消息所必須的上下文提供給regerror()函數(shù)。在執(zhí)行函數(shù)regerror()時,將按照參數(shù)errbuf_size指明的最大字

節(jié)數(shù),在errbuf緩沖區(qū)中填入格式化后的錯誤信息,同時返回錯誤信息的長度。

應(yīng)用正則表達式

最后給出一個具體的實例,介紹如何在C語言程序中處理正則表達式。

#include stdio.h;

#include sys/types.h;

#include regex.h;

/* 取子串的函數(shù) */

static char* substr(const char*str, unsigned start, unsigned end)

{

unsigned n = end - start;

static char stbuf[256];

strncpy(stbuf, str + start, n);

stbuf[n] = 0;

return stbuf;

}

/* 主程序 */

int main(int argc, char** argv)

{

char * pattern;

int x, z, lno = 0, cflags = 0;

char ebuf[128], lbuf[256];

regex_t reg;

regmatch_t pm[10];

const size_t nmatch = 10;

/* 編譯正則表達式*/

pattern = argv[1];

z = regcomp(reg, pattern, cflags);

if (z != 0){

regerror(z, reg, ebuf, sizeof(ebuf));

fprintf(stderr, "%s: pattern '%s' \n", ebuf, pattern);

return 1;

}

/* 逐行處理輸入的數(shù)據(jù) */

while(fgets(lbuf, sizeof(lbuf), stdin)) {

++lno;

if ((z = strlen(lbuf)) ; 0 lbuf[z-1] == '\n')

lbuf[z - 1] = 0;

/* 對每一行應(yīng)用正則表達式進行匹配 */

z = regexec(reg, lbuf, nmatch, pm, 0);

if (z == REG_NOMATCH) continue;

else if (z != 0) {

regerror(z, reg, ebuf, sizeof(ebuf));

fprintf(stderr, "%s: regcom('%s')\n", ebuf, lbuf);

return 2;

}

/* 輸出處理結(jié)果 */

for (x = 0; x nmatch pm[x].rm_so != -1; ++ x) {

if (!x) printf("%04d: %s\n", lno, lbuf);

printf(" $%d='%s'\n", x, substr(lbuf, pm[x].rm_so, pm[x].rm_eo));

}

}

/* 釋放正則表達式 */

regfree(reg);

return 0;

}

上述程序負責(zé)從命令行獲取正則表達式,然后將其運用于從標準輸入得到的每行數(shù)據(jù),并打印出匹配結(jié)果。執(zhí)行下面的命令可以編譯并執(zhí)行該程序:

# gcc regexp.c -o regexp

# ./regexp 'regex[a-z]*' regexp.c

0003: #include regex.h;

$0='regex'

0027: regex_t reg;

$0='regex'

0054: z = regexec(reg, lbuf, nmatch, pm, 0);

$0='regexec'

小結(jié)

對那些需要進行復(fù)雜數(shù)據(jù)處理的程序來說,正則表達式無疑是一個非常有用的工具。本文重點在于闡述如何在C語言中利用正則表達式來簡化字符串處理,以便在數(shù)據(jù)處理方面能夠獲得與Perl語言類似的靈活性。

關(guān)于學(xué)生信息管理的C語言編程問題求救(一定要是C語言編程,謝謝)

#includestdio.h /*引用庫函數(shù)*/

#includestdlib.h

#includectype.h

#includestring.h

typedef struct /*定義結(jié)構(gòu)體數(shù)組*/

{

char num[10]; /*學(xué)號*/

char name[20]; /*姓名*/

int score; /*成績*/

}Student;

Student stu[80]; /*結(jié)構(gòu)體數(shù)組變量*/

int menu_select() /*菜單函數(shù)*/

{

char c;

do{

system("cls"); /*運行前清屏*/

printf("\t\t****Students' Grade Management System****\n"); /*菜單選擇*/

printf("\t\t | 1. Input Records |\n");

printf("\t\t | 2. Display All Records |\n");

printf("\t\t | 3. Sort |\n");

printf("\t\t | 4. Insert a Record |\n");

printf("\t\t | 5. Delete a Record |\n");

printf("\t\t | 6. Query |\n");

printf("\t\t | 7. Statistic |\n");

printf("\t\t | 8. Add Records from a Text File|\n");

printf("\t\t | 9. Write to a Text file |\n");

printf("\t\t | 0. Quit |\n");

printf("\t\t*****************************************\n");

printf("\t\t\tGive your Choice(0-9):");

c=getchar(); /*讀入選擇*/

}while(c'0'||c'9');

return(c-'0'); /*返回選擇*/

}

int Input(Student stud[],int n) /*輸入若干條記錄*/

{int i=0;

char sign,x[10]; /*x[10]為清除多余的數(shù)據(jù)所用*/

while(sign!='n'sign!='N') /*判斷*/

{ printf("\t\t\tstudent's num:"); /*交互輸入*/

scanf("\t\t\t%s",stud[n+i].num);

printf("\t\t\tstudent's name:");

scanf("\t\t\t%s",stud[n+i].name);

printf("\t\t\tstudent's score:");

scanf("\t\t\t%d",stud[n+i].score);

gets(x); /*清除多余的輸入*/

printf("\t\t\tany more records?(Y/N)");

scanf("\t\t\t%c",sign); /*輸入判斷*/

i++;

}

return(n+i);

}

void Display(Student stud[],int n) /*顯示所有記錄*/

{

int i;

printf("\t\t\t-----------------------------------\n"); /*格式頭*/

printf("\t\t\tnumber name score\n");

printf("\t\t\t-----------------------------------\n");

for(i=1;in+1;i++) /*循環(huán)輸入*/

{

printf("\t\t\t%-16s%-15s%d\n",stud[i-1].num,stud[i-1].name,stud[i-1].score);

if(i1i%10==0) /*每十個暫停*/

{printf("\t\t\t-----------------------------------\n"); /*格式*/

printf("\t\t\t");

system("pause");

printf("\t\t\t-----------------------------------\n");

}

}

printf("\t\t\t");

system("pause");

}

void Sort_by_num(Student stud[],int n) /*按學(xué)號排序*/

{ int i,j,*p,*q,s;

char t[10];

for(i=0;in-1;i++) /*冒泡法排序*/

for(j=0;jn-1-i;j++)

if(strcmp(stud[j].num,stud[j+1].num)0)

{strcpy(t,stud[j+1].num);

strcpy(stud[j+1].num,stud[j].num);

strcpy(stud[j].num,t);

strcpy(t,stud[j+1].name);

strcpy(stud[j+1].name,stud[j].name);

strcpy(stud[j].name,t);

p=stud[j+1].score;

q=stud[j].score;

s=*p;

*p=*q;

*q=s;

}

}

int Insert_a_record(Student stud[],int n) /*插入一條記錄*/

{char x[10]; /*清除多余輸入所用*/

printf("\t\t\tstudent's num:"); /*交互式輸入*/

scanf("\t\t\t%s",stud[n].num);

printf("\t\t\tstudent's name:");

scanf("\t\t\t%s",stud[n].name);

printf("\t\t\tstudent's score:");

scanf("\t\t\t%d",stud[n].score);

gets(x);

n++;

Sort_by_num(stud,n); /*調(diào)用排序函數(shù)*/

printf("\t\t\tInsert Successed!\n"); /*返回成功信息*/

return(n);

}

int Delete_a_record(Student stud[],int n) /*按姓名查找,刪除一條記錄*/

{ char s[20];

int i=0,j;

printf("\t\t\ttell me his(her) name:"); /*交互式問尋*/

scanf("%s",s);

while(strcmp(stud[i].name,s)!=0in) i++; /*查找判斷*/

if(i==n)

{ printf("\t\t\tnot find!\n"); /*返回失敗信息*/

return(n);

}

for(j=i;jn-1;j++) /*刪除操作*/

{

strcpy(stud[j].num,stud[j+1].num);

strcpy(stud[j].name,stud[j+1].name);

stud[j].score=stud[j+1].score;

}

printf("\t\t\tDelete Successed!\n"); /*返回成功信息*/

return(n-1);

}

void Query_a_record(Student stud[],int n) /*查找并顯示一個記錄*/

{ char s[20];

int i=0;

printf("\t\t\tinput his(her) name:"); /*交互式輸入*/

scanf("\t\t\t%s",s);

while(strcmp(stud[i].name,s)!=0in) i++; /*查找判斷*/

if(i==n)

{ printf("\t\t\tnot find!\n"); /*輸入失敗信息*/

return;

}

printf("\t\t\this(her) number:%s\n",stud[i].num); /*輸出該學(xué)生信息*/

printf("\t\t\this(her) score:%d\n",stud[i].score);

}

void Statistic(Student stud[],int n) /*新增功能,輸出統(tǒng)計信息*/

{ int i,j=0,k=0,sum=0;

float aver; /*成績平均值*/

for(i=0;in;i++) /*循環(huán)輸入判斷*/

{

sum+=stud[i].score;

if(stud[j].scorestud[i].score) j=i;

if(stud[k].scorestud[i].score) k=i;

}

aver=1.0*sum/n;

printf("\t\t\tthere are %d records.\n",n); /*總共記錄數(shù)*/

printf("\t\t\tthe hignest score:\n"); /*最高分*/

printf("\t\t\tnumber:%s name:%s score:%d\n",stud[j].num,stud[j].name,stud[j].score);

printf("\t\t\tthe lowest score:\n"); /*最低分*/

printf("\t\t\tnumber:%s name:%s score:%d\n",stud[k].num,stud[k].name,stud[k].score);

printf("\t\t\tthe average score is %5.2f\n",aver); /*平均分*/

}

int AddfromText(Student stud[],int n) /*從文件中讀入數(shù)據(jù)*/

{ int i=0,num;

FILE *fp; /*定義文件指針*/

char filename[20]; /*定義文件名*/

printf("\t\t\tInput the filename:");

scanf("\t\t\t%s",filename); /*輸入文件名*/

if((fp=fopen(filename,"rb"))==NULL) /*打開文件*/

{ printf("\t\t\tcann't open the file\n"); /*打開失敗信息*/

printf("\t\t\t");

system("pause");

return(n);

}

fscanf(fp,"%d",num); /*讀入總記錄量*/

while(inum) /*循環(huán)讀入數(shù)據(jù)*/

{

fscanf(fp,"%s%s%d",stud[n+i].num,stud[n+i].name,stud[n+i].score);

i++;

}

n+=num;

fclose(fp); /*關(guān)閉文件*/

printf("\t\t\tSuccessed!\n");

printf("\t\t\t");

system("pause");

return(n);

}

void WritetoText(Student stud[],int n) /*將所有記錄寫入文件*/

{

int i=0;

FILE *fp; /*定義文件指針*/

char filename[20]; /*定義文件名*/

printf("\t\t\tWrite Records to a Text File\n"); /*輸入文件名*/

printf("\t\t\tInput the filename:");

scanf("\t\t\t%s",filename);

if((fp=fopen(filename,"w"))==NULL) /*打開文件*/

{

printf("\t\t\tcann't open the file\n");

system("pause");

return;

}

fprintf(fp,"%d\n",n); /*循環(huán)寫入數(shù)據(jù)*/

while(in)

{

fprintf(fp,"%-16s%-15s%d\n",stud[i].num,stud[i].name,stud[i].score);

i++;

}

fclose(fp); /*關(guān)閉文件*/

printf("Successed!\n"); /*返回成功信息*/

}

void main() /*主函數(shù)*/

{

int n=0;

for(;;)

{

switch(menu_select()) /*選擇判斷*/

{

case 1:

printf("\t\t\tInput Records\n"); /*輸入若干條記錄*/

n=Input(stu,n);

break;

case 2:

printf("\t\t\tDisplay All Records\n"); /*顯示所有記錄*/

Display(stu,n);

break;

case 3:

printf("\t\t\tSort\n");

Sort_by_num(stu,n); /*按學(xué)號排序*/

printf("\t\t\tSort Suceessed!\n");

printf("\t\t\t");

system("pause");

break;

case 4:

printf("\t\t\tInsert a Record\n");

n=Insert_a_record(stu,n); /*插入一條記錄*/

printf("\t\t\t");

system("pause");

break;

case 5:

printf("\t\t\tDelete a Record\n");

n=Delete_a_record(stu,n); /*按姓名查找,刪除一條記錄*/

printf("\t\t\t");

system("pause");

break;

case 6:

printf("\t\t\tQuery\n");

Query_a_record(stu,n); /*查找并顯示一個記錄*/

printf("\t\t\t");

system("pause");

break;

case 7:

printf("\t\t\tStatistic\n");

Statistic(stu,n); /*新增功能,輸出統(tǒng)計信息*/

printf("\t\t\t");

system("pause");

break;

case 8:

printf("\t\t\tAdd Records from a Text File\n");

n=AddfromText(stu,n); /*新增功能,輸出統(tǒng)計信息*/

break;

case 9:

printf("\t\t\tWrite to a Text file\n");

WritetoText(stu,n); /*循環(huán)寫入數(shù)據(jù)*/

printf("\t\t\t");

system("pause");

break;

case 0:

printf("\t\t\tHave a Good Luck,Bye-bye!\n"); /*結(jié)束程序*/

printf("\t\t\t");

system("pause");

exit(0);

}

}

}

四、函數(shù)調(diào)用關(guān)系圖

注:“→”代表調(diào)用

Input函數(shù)

打印鏈表記錄

Display函數(shù)

輸入若干條記錄

menu_select()函數(shù)

選擇菜單

Sort_by_num函數(shù)

顯示所有記錄

Delete_a_record函數(shù)

按姓名查找,刪除一條記錄

Query_a_record查找并顯示一條記錄

Statistic函數(shù)

輸出統(tǒng)計信息 (新增)

AddfromText函數(shù)

從正文中添加數(shù)據(jù)到結(jié)構(gòu)體數(shù)組中

Main函數(shù)

Insert_a_record插入一條記錄

WritetoText函數(shù) 將所有數(shù)據(jù)寫入文件中

退出程序

Reverse(head)函數(shù)

按學(xué)號排序

五、設(shè)計測試流程

1、進入界面

2、輸入選項1,回車;

按提示輸入數(shù)據(jù):

3、回到主菜單;

輸入選項7,回車;

輸入文件名:data.txt,回車;

出現(xiàn)成功提示,則讀入文件操作成功。

4、回到主菜單,輸入2,回車

每10個暫停顯示數(shù)據(jù)

5、回到主菜單,輸入3,回車

出現(xiàn)排序成功信息。

6、回到主菜單,輸入4,回車

按提示插入一組數(shù)據(jù)

7、回到主菜單,輸入5,回車

按提示輸入姓名,刪除數(shù)據(jù)

出現(xiàn)刪除成功的信息

8、回到主菜單,輸入6,回車

輸入姓名進行查詢

9、回到主菜單,輸入7,回車

出現(xiàn)統(tǒng)計信息

10、回到主菜單,輸入9,回車

輸入result.txt,回車

出現(xiàn)成功寫入文件的信息

11、回到主菜單,輸入0,回車退出系統(tǒng)

回答者:kingkey001 - 試用期 一級 7-14 22:38

修改答復(fù): kingkey001,您要修改的答復(fù)如下: 積分規(guī)則 關(guān)閉

C語言課程設(shè)計報告-------學(xué)生成績簡單管理程序

一、系統(tǒng)菜單的主要功能

(1)輸入若干條記錄

(2)顯示所有記錄

(3)按學(xué)號排序

(4)插入一條記錄

(5)按姓名查找,刪除一條記錄

(6)查找并顯示一條記錄

(7)輸出統(tǒng)計信息 (新增)

(8)從正文中添加數(shù)據(jù)到結(jié)構(gòu)體數(shù)組中

(9)將所有數(shù)據(jù)寫入文件中

(0)退出程序

二、題目分析

該題主要考察學(xué)生對結(jié)構(gòu)體,指針,文件的操作,以及C語言算法的掌握,所以完成此道題目要求較強的設(shè)計能力,尤其是要有一種大局觀的意識。如何調(diào)程序也非常重要,通過這個程序可以學(xué)習(xí)到以前調(diào)試短程序沒有的的經(jīng)驗。

菜單中的每一個選項都對應(yīng)一個子程序,子程序的算法幾乎囊獲了所有C語言學(xué)過的技巧,下面就各個子程序中的功能進行說明:

功能1和4的算法相似,輸入一條記錄到結(jié)構(gòu)體中去,其中有一部很關(guān)鍵,就是通過gets將所有的多余的字符,回車讀去,否則就會出錯。

功能2是顯示所有的記錄,通過循環(huán)輸出,格式也比較重要。

功能3為按學(xué)號排序,因為學(xué)號定義成了字符數(shù)組的形式,因此在運用冒泡法進行排序的時候,要用到strcmp,strcpy等函數(shù)。

功能5為按姓名刪除記錄,先輸入姓名,再一一比較,如果沒有則返回失敗信息,如果找到就將此記錄都向前移一位,返回n-1。

功能6的算法在5中就已經(jīng)體現(xiàn)了,輸入姓名,一一比較。

功能7為新增的功能,因為考慮到原來給出的函數(shù)中竟然沒有對學(xué)生成績的統(tǒng)計功能,因此新增此功能,可以得出所有的記錄個數(shù),最高、最低、平均分,并輸出相關(guān)的學(xué)生信息等。

功能8和9是對文件的操作,提前準備好數(shù)據(jù)。

三、程序正文部分

#includestdio.h /*引用庫函數(shù)*/

#includestdlib.h

#includectype.h

#includestring.h

typedef struct /*定義結(jié)構(gòu)體數(shù)組*/

{

char num[10]; /*學(xué)號*/

char name[20]; /*姓名*/

int score; /*成績*/

}Student;

Student stu[80]; /*結(jié)構(gòu)體數(shù)組變量*/

int menu_select() /*菜單函數(shù)*/

{

char c;

do{

system("cls"); /*運行前清屏*/

printf("\t\t****Students' Grade Management System****\n"); /*菜單選擇*/

printf("\t\t | 1. Input Records |\n");

printf("\t\t | 2. Display All Records |\n");

printf("\t\t | 3. Sort |\n");

printf("\t\t | 4. Insert a Record |\n");

printf("\t\t | 5. Delete a Record |\n");

printf("\t\t | 6. Query |\n");

printf("\t\t | 7. Statistic |\n");

printf("\t\t | 8. Add Records from a Text File|\n");

printf("\t\t | 9. Write to a Text file |\n");

printf("\t\t | 0. Quit |\n");

printf("\t\t*****************************************\n");

printf("\t\t\tGive your Choice(0-9):");

c=getchar(); /*讀入選擇*/

}while(c'0'||c'9');

return(c-'0'); /*返回選擇*/

}

int Input(Student stud[],int n) /*輸入若干條記錄*/

{int i=0;

char sign,x[10]; /*x[10]為清除多余的數(shù)據(jù)所用*/

while(sign!='n'sign!='N') /*判斷*/

{ printf("\t\t\tstudent's num:"); /*交互輸入*/

scanf("\t\t\t%s",stud[n+i].num);

printf("\t\t\tstudent's name:");

scanf("\t\t\t%s",stud[n+i].name);

printf("\t\t\tstudent's score:");

scanf("\t\t\t%d",stud[n+i].score);

gets(x); /*清除多余的輸入*/

printf("\t\t\tany more records?(Y/N)");

scanf("\t\t\t%c",sign); /*輸入判斷*/

i++;

}

return(n+i);

}

void Display(Student stud[],int n) /*顯示所有記錄*/

{

int i;

printf("\t\t\t-----------------------------------\n"); /*格式頭*/

printf("\t\t\tnumber name score\n");

printf("\t\t\t-----------------------------------\n");

for(i=1;in+1;i++) /*循環(huán)輸入*/

{

printf("\t\t\t%-16s%-15s%d\n",stud[i-1].num,stud[i-1].name,stud[i-1].score);

if(i1i%10==0) /*每十個暫停*/

{printf("\t\t\t-----------------------------------\n"); /*格式*/

printf("\t\t\t");

system("pause");

printf("\t\t\t-----------------------------------\n");

}

}

printf("\t\t\t");

system("pause");

}

void Sort_by_num(Student stud[],int n) /*按學(xué)號排序*/

{ int i,j,*p,*q,s;

char t[10];

for(i=0;in-1;i++) /*冒泡法排序*/

for(j=0;jn-1-i;j++)

if(strcmp(stud[j].num,stud[j+1].num)0)

{strcpy(t,stud[j+1].num);

strcpy(stud[j+1].num,stud[j].num);

strcpy(stud[j].num,t);

strcpy(t,stud[j+1].name);

strcpy(stud[j+1].name,stud[j].name);

strcpy(stud[j].name,t);

p=stud[j+1].score;

q=stud[j].score;

s=*p;

*p=*q;

*q=s;

}

}

int Insert_a_record(Student stud[],int n) /*插入一條記錄*/

{char x[10]; /*清除多余輸入所用*/

printf("\t\t\tstudent's num:"); /*交互式輸入*/

scanf("\t\t\t%s",stud[n].num);

printf("\t\t\tstudent's name:");

scanf("\t\t\t%s",stud[n].name);

printf("\t\t\tstudent's score:");

scanf("\t\t\t%d",stud[n].score);

gets(x);

n++;

Sort_by_num(stud,n); /*調(diào)用排序函數(shù)*/

printf("\t\t\tInsert Successed!\n"); /*返回成功信息*/

return(n);

}

int Delete_a_record(Student stud[],int n) /*按姓名查找,刪除一條記錄*/

{ char s[20];

int i=0,j;

printf("\t\t\ttell me his(her) name:"); /*交互式問尋*/

scanf("%s",s);

while(strcmp(stud[i].name,s)!=0in) i++; /*查找判斷*/

if(i==n)

{ printf("\t\t\tnot find!\n"); /*返回失敗信息*/

return(n);

}

for(j=i;jn-1;j++) /*刪除操作*/

{

strcpy(stud[j].num,stud[j+1].num);

strcpy(stud[j].name,stud[j+1].name);

stud[j].score=stud[j+1].score;

}

printf("\t\t\tDelete Successed!\n"); /*返回成功信息*/

return(n-1);

}

void Query_a_record(Student stud[],int n) /*查找并顯示一個記錄*/

{ char s[20];

int i=0;

printf("\t\t\tinput his(her) name:"); /*交互式輸入*/

scanf("\t\t\t%s",s);

while(strcmp(stud[i].name,s)!=0in) i++; /*查找判斷*/

if(i==n)

{ printf("\t\t\tnot find!\n"); /*輸入失敗信息*/

return;

}

printf("\t\t\this(her) number:%s\n",stud[i].num); /*輸出該學(xué)生信息*/

printf("\t\t\this(her) score:%d\n",stud[i].score);

}

void Statistic(Student stud[],int n) /*新增功能,輸出統(tǒng)計信息*/

{ int i,j=0,k=0,sum=0;

float aver; /*成績平均值*/

for(i=0;in;i++) /*循環(huán)輸入判斷*/

{

sum+=stud[i].score;

if(stud[j].scorestud[i].score) j=i;

if(stud[k].scorestud[i].score) k=i;

}

aver=1.0*sum/n;

printf("\t\t\tthere are %d records.\n",n); /*總共記錄數(shù)*/

printf("\t\t\tthe hignest score:\n"); /*最高分*/

printf("\t\t\tnumber:%s name:%s score:%d\n",stud[j].num,stud[j].name,stud[j].score);

printf("\t\t\tthe lowest score:\n"); /*最低分*/

printf("\t\t\tnumber:%s name:%s score:%d\n",stud[k].num,stud[k].name,stud[k].score);

printf("\t\t\tthe average score is %5.2f\n",aver); /*平均分*/

}

int AddfromText(Student stud[],int n) /*從文件中讀入數(shù)據(jù)*/

{ int i=0,num;

FILE *fp; /*定義文件指針*/

char filename[20]; /*定義文件名*/

printf("\t\t\tInput the filename:");

scanf("\t\t\t%s",filename); /*輸入文件名*/

if((fp=fopen(filename,"rb"))==NULL) /*打開文件*/

{ printf("\t\t\tcann't open the file\n"); /*打開失敗信息*/

printf("\t\t\t");

system("pause");

return(n);

}

fscanf(fp,"%d",num); /*讀入總記錄量*/

while(inum) /*循環(huán)讀入數(shù)據(jù)*/

{

fscanf(fp,"%s%s%d",stud[n+i].num,stud[n+i].name,stud[n+i].score);

i++;

}

n+=num;

fclose(fp); /*關(guān)閉文件*/

printf("\t\t\tSuccessed!\n");

printf("\t\t\t");

system("pause");

return(n);

}

void WritetoText(Student stud[],int n) /*將所有記錄寫入文件*/

{

int i=0;

FILE *fp; /*定義文件指針*/

char filename[20]; /*定義文件名*/

printf("\t\t\tWrite Records to a Text File\n"); /*輸入文件名*/

printf("\t\t\tInput the filename:");

scanf("\t\t\t%s",filename);

if((fp=fopen(filename,"w"))==NULL) /*打開文件*/

{

printf("\t\t\tcann't open the file\n");

system("pause");

return;

}

fprintf(fp,"%d\n",n); /*循環(huán)寫入數(shù)據(jù)*/

while(in)

{

fprintf(fp,"%-16s%-15s%d\n",stud[i].num,stud[i].name,stud[i].score);

i++;

}

fclose(fp); /*關(guān)閉文件*/

printf("Successed!\n"); /*返回成功信息*/

}

void main() /*主函數(shù)*/

{

int n=0;

for(;;)

{

switch(menu_select()) /*選擇判斷*/

{

case 1:

printf("\t\t\tInput Records\n"); /*輸入若干條記錄*/

n=Input(stu,n);

break;

case 2:

printf("\t\t\tDisplay All Records\n"); /*顯示所有記錄*/

Display(stu,n);

break;

case 3:

printf("\t\t\tSort\n");

Sort_by_num(stu,n); /*按學(xué)號排序*/

printf("\t\t\tSort Suceessed!\n");

printf("\t\t\t");

system("pause");

break;

case 4:

printf("\t\t\tInsert a Record\n");

n=Insert_a_record(stu,n); /*插入一條記錄*/

printf("\t\t\t");

system("pause");

break;

case 5:

printf("\t\t\tDelete a Record\n");

n=Delete_a_record(stu,n); /*按姓名查找,刪除一條記錄*/

printf("\t\t\t");

system("pause");

break;

case 6:

printf("\t\t\tQuery\n");

Query_a_record(stu,n); /*查找并顯示一個記錄*/

printf("\t\t\t");

system("pause");

break;

case 7:

printf("\t\t\tStatistic\n");

Statistic(stu,n); /*新增功能,輸出統(tǒng)計信息*/

printf("\t\t\t");

system("pause");

break;

case 8:

printf("\t\t\tAdd Records from a Text File\n");

n=AddfromText(stu,n); /*新增功能,輸出統(tǒng)計信息*/

break;

case 9:

printf("\t\t\tWrite to a Text file\n");

WritetoText(stu,n); /*循環(huán)寫入數(shù)據(jù)*/

printf("\t\t\t");

system("pause");

break;

case 0:

printf("\t\t\tHave a Good Luck,Bye-bye!\n"); /*結(jié)束程序*/

printf("\t\t\t");

system("pause");

exit(0);

}

}

}

四、函數(shù)調(diào)用關(guān)系圖

注:“→”代表調(diào)用

Input函數(shù)

打印鏈表記錄

Display函數(shù)

輸入若干條記錄

menu_select()函數(shù)

選擇菜單

Sort_by_num函數(shù)

顯示所有記錄

Delete_a_record函數(shù)

按姓名查找,刪除一條記錄

Query_a_record查找并顯示一條記錄

Statistic函數(shù)

輸出統(tǒng)計信息 (新增)

AddfromText函數(shù)

從正文中添加數(shù)據(jù)到結(jié)構(gòu)體數(shù)組中

Main函數(shù)

Insert_a_record插入一條記錄

WritetoText函數(shù) 將所有數(shù)據(jù)寫入文件中

退出程序

Reverse(head)函數(shù)

按學(xué)號排序

五、設(shè)計測試流程

1、進入界面

2、輸入選項1,回車;

按提示輸入數(shù)據(jù):

3、回到主菜單;

輸入選項7,回車;

輸入文件名:data.txt,回車;

出現(xiàn)成功提示,則讀入文件操作成功。

4、回到主菜單,輸入2,回車

每10個暫停顯示數(shù)據(jù)

5、回到主菜單,輸入3,回車

文章題目:c語言mensed函數(shù) c語言meset函數(shù)
分享路徑:http://www.chinadenli.net/article2/dosieic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設(shè)品牌網(wǎng)站建設(shè)定制開發(fā)虛擬主機網(wǎng)站內(nèi)鏈響應(yīng)式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)