當前位置:編程學習大全網 - 編程語言 - c編程(初學者)

c編程(初學者)

/*:學生信息管理系統

學生信息包括:學號,姓名,年齡,性別,出生日期,地址,電話號碼,

電子郵件等等。實現的功能:

(1)系統在菜單模式下工作。

(2)學生信息輸入功能(學生信息通過文件保存)-輸入

(3)學生信息瀏覽功能-輸出

(4)查詢和排序功能-算法

(5)根據學號查詢

(6)按姓名查詢

刪除和修改學生信息*/

/* * * * * *用戶定義函數* * * * * * * *

# include & ltstdio.h & gt

# include & ltstdlib.h & gt

# include & ltstring.h & gt

#定義PF打印f

#define LEN sizeof(結構學生)

結構學生

{

第[20]號字符;

char name[20];

int age

char sex[3];/*'F '表示男性,' m '表示女性*/

char生日[10];

字符地址[30];

充電電話[20];

char e _ mail[20];

結構學生*下壹個;//下壹個節點

};

typedef結構學生STU

STU * head = NULL//全局指針

int n,I = 0;//全局變量

void show _ menu();//顯示菜單

void menu();

void insert _ stu();//學生信息錄入

void print _ stu();//學生信瀏覽

void search _ NO();//按學號查詢信息。

void搜索名稱();//按名稱查詢信息。

void arrage _ stu();//排序

void del _ stu();//刪除學生信息

void revise _ stu();//修改學生信息

void begin();//建立壹個鏈表

void save();

void end();//結束

void main()

{

begin();

menu();

}

void begin(){

FILE * fp

長尺寸;

STU *NEW,* cur

head=(STU *)malloc(sizeof(STU))。

head->;next = NULL

if((fp=fopen("fname.txt "," r ")= = NULL)

{

Printf("這是新表\ n ");

返回;

}

fseek(fp,0L,2);

size = ftell(FP);

如果(!尺寸)

{

Printf("這是壹個空表\ n ");

返回;

}

//開始創建鏈表

倒帶(FP);//移動到文件的開頭

cur=head->接下來;

而(!feof(fp))

{

NEW=(STU *)malloc(sizeof(STU))。

fscanf(fp," %s %s %d %s %s %s %s %s\n ",NEW-& gt;不,新建-& gt;姓名& amp新建-& gt;年齡\

新建-& gt;性,新-& gt;生日,新-& gt;地址,新-& gt;電話,新-& gt;電子郵件);

新建-& gt;next = NULL

//創建節點後。

if(head-& gt;next==NULL)

head->;next = NEW

其他

cur->;next = NEW

cur = NEW

n++;

}

cur->;next = NULL

fclose(FP);

}

無效菜單()

{

int c;

show _ menu();

while(1)

{

scanf("%d ",& ampc);

開關(c)

{

getchar();

案例1:insert _ stu();打破;

案例二:print _ stu();打破;

案例三:search _ NO();打破;

案例四:search _ name();打破;

案例五:del _ stu();打破;

案例6:revise _ stu();打破;

案例7:arrage _ stu();打破;

案例0:出口(0);

}

show _ menu();

}

}

void show_menu()

{

PF(" \ n ");

PF(" \ n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *)

PF("\t\t1。輸入學生信息\ n ");

PF("\t\t2。瀏覽學生信息\ n ");

PF("\t\t3。按學號查詢信息\ n ");

PF("\t\t4。按姓名查詢信息\ n ");

PF("\t\t5。刪除學生信息\ n”);

PF("\t\t6。修改學生信息\ n ");

PF("\t\t7排序");

PF("\t\t0。退出\ n ");

PF(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n ");

pf(" \ n請選擇\ n ");

}

Void insert_stu() //學生信息錄入

{

n = 0;

STU *p1=NULL,* p2 = NULL

p 1 =(STU *)malloc(sizeof(STU))。

PF(" \ n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ");//輸入學生信息

PF(" \ t \ t輸入學生ID:\ t ");

scanf("%s ",p 1->;否);//學生編號

PF(" \ t \ t輸入學生姓名:\ t ");

scanf("%s ",p 1->;姓名);//名稱

PF(" \ t \ t輸入學生年齡:\ t ");

scanf("%d ",& ampp 1->;年齡);//年齡

PF(" \ t \ t輸入學生性別:\ t ");

scanf("%s ",p 1->;性);//性別

PF(" \ t \ t輸入學生的出生日期:\ t ");

scanf("%s ",p 1->;生日);//出生日期

pf(" \ t \ t輸入學生地址:\ t ");

scanf("%s ",p 1->;地址);//地址

pf(" \ t \ t輸入學生電話號碼:\ t ");

scanf("%s ",p 1->;電話);//電話

pf(" \ t \ t輸入學生電子郵件:\ t ");

scanf("%s ",p 1->;電子郵件);//電子郵件

n++;

if(head-& gt;next==NULL)

{

head =(STU *)malloc(LEN);

head->;next = p 1;

}

其他

{

for(p2 =頭;p2->;下壹個!= NULLp2 = p2-& gt;下壹個);/*找到最後壹個節點,然後

將添加的節點掛在上面*/

p2->;next = p 1;

}

p 1->;next = NULL

save();//保存到文件

}

Void print_stu() //學生信瀏覽

{

STU * p = NULL

If(head==NULL) //判斷鏈表是否為空。

{

PF("文檔中沒有記錄!\ n ");

返回;

}

for(p = head-& gt;接下來;p!= NULLp = p-& gt;下壹步)//讀取信息。

{

PF(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *)

pf(" \ t \ t學生ID: \t%s\n ",p-& gt;否);

pf(" \ t \ t學生姓名:\t%s\n ",p-& gt;姓名);

pf(" \ t \ t學生年齡:\t%d\n ",p-& gt;年齡);

pf(" \ t \ t學生性別:\t%s\n ",p-& gt;性);

PF(" \ t \ t學生的出生日期:\t%s\n ",p-& gt;生日);

pf(" \ t \ t學生地址:\t%s\n ",p-& gt;地址);

pf(" \ t \ t學生電話:\t%s\n ",p-& gt;電話);

pf(" \ t \ t學生電子郵件:\t%s\n ",p-& gt;電子郵件);

PF(" \ n ");}//輸出信息

}

Void search_name() //搜索學生姓名信息

{

STU * p = NULL

char name[20];

If(head==NULL) //判斷鏈表是否為空。

{

PF("文檔中沒有記錄!\ n ");

返回;

}

PF("輸入學生姓名:");

scanf("%s ",名稱);

for(p = head-& gt;接下來;p!= NULLp = p-& gt;下壹步)//讀取信息。

{

如果(!strcmp(p-& gt;名字,名字))

{ pf(" * * * * * * * * * * * * * * * * * * * * * *您要找的學生是**********************\n

pf(" \ t \ t學生ID: \t%s\n ",p-& gt;否);

pf(" \ t \ t學生姓名:\t%s\n ",p-& gt;姓名);

pf(" \ t \ t學生年齡:\t%d\n ",p-& gt;年齡);

pf(" \ t \ t學生性別:\t%s\n ",p-& gt;性);

PF(" \ t \ t學生的出生日期:\t%s\n ",p-& gt;生日);

pf(" \ t \ t學生地址:\t%s\n ",p-& gt;地址);

pf(" \ t \ t學生電話:\t%s\n ",p-& gt;電話);

pf(" \ t \ t學生電子郵件:\t%s\n ",p-& gt;電子郵件);

PF(" \ n ");

I = 1;}

}//輸出信息

如果(!我)

{PF("沒有這個學生的信息!請查收:“);}//找不到信息時的處理

}

Void search_NO() //搜索學號信息

{

STU * p = NULL

第[20]號字符;

If(head==NULL) //判斷鏈表是否為空。

{

PF("文檔中沒有記錄!\ n ");

返回;

}

PF("請輸入學號:");

scanf("%s ",否);

for(p = head-& gt;接下來;p!= NULLp = p-& gt;下壹步)//讀取信息。

{

如果(!strcmp(p-& gt;不不))

{ pf(" * * * * * * * * * * * * * * * * * * * * * *您要找的學生是**********************\n

pf(" \ t \ t學生ID: \t%s\n ",p-& gt;否);

pf(" \ t \ t學生姓名:\t%s\n ",p-& gt;姓名);

pf(" \ t \ t學生年齡:\t%d\n ",p-& gt;年齡);

pf(" \ t \ t學生性別:\t%s\n ",p-& gt;性);

PF(" \ t \ t學生的出生日期:\t%s\n ",p-& gt;生日);

pf(" \ t \ t學生地址:\t%s\n ",p-& gt;地址);

pf(" \ t \ t學生電話:\t%s\n ",p-& gt;電話);

pf(" \ t \ t學生電子郵件:\t%s\n ",p-& gt;電子郵件);

PF(" \ n ");

I = 1;}

}//輸出信息

如果(!我)

{PF("沒有這個學生的信息!請查收:“);}//找不到信息時的處理

}

void revise_stu()

{

STU * p = NULL

If(head==NULL) //判斷鏈表是否為空。

{

PF("文檔中沒有記錄!\ n ");

返回;

}

第[20]號字符;

PF("請輸入學號:\ t ");

scanf("%s ",否);

for(p = head-& gt;接下來;p!= NULLp = p-& gt;下壹個)

{

如果(!strcmp(p-& gt;否,否))//驗證信息是否正確。

{

PF ("* * * * * * * * * * * * * * * *您要修改的學生是* * * * * * * * * * * * * * * * * * * * * * \ n ")。

pf(" \ t \ t學生ID: \t%s\n ",p-& gt;否);

pf(" \ t \ t學生姓名:\t%s\n ",p-& gt;姓名);

pf(" \ t \ t學生年齡:\t%d\n ",p-& gt;年齡);

pf(" \ t \ t學生性別:\t%s\n ",p-& gt;性);

PF(" \ t \ t學生的出生日期:\t%s\n ",p-& gt;生日);

pf(" \ t \ t學生地址:\t%s\n ",p-& gt;地址);

pf(" \ t \ t學生電話:\t%s\n ",p-& gt;電話);

pf(" \ t \ t學生電子郵件:\t%s\n ",p-& gt;電子郵件);

PF(" \ n ");//輸出要修改的信息。

I = 1;

PF(“* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *”,否);

strcpy(p-& gt;沒有,沒有);

PF(" \ t \ t輸入並修改學生姓名:\ t ");

scanf("%s ",p-& gt;姓名);

pf(" \ t \ t輸入並修改學生年齡:\ t ");

scanf("%d ",& ampp->;年齡);

pf(" \ t \ t輸入並修改學生性別:\ t ");

scanf("%s ",p-& gt;性);

PF(" \ t \ t輸入並修改學生的出生日期:\ t ");

scanf("%s ",p-& gt;生日);

PF(" \ t \ t輸入並修改學生地址:\ t ");

scanf("%s ",p-& gt;地址);

PF(" \ t \ t輸入並修改學生電話號碼:\ t ");

scanf("%s ",p-& gt;電話);

pf(" \ t \ t輸入並修改學生電子郵件:\ t ");

scanf("%s ",p-& gt;電子郵件);

PF(" \ n ");//輸入修改信息

save();

}

}如果(!我)

{PF("沒有這個學生的信息!請查收:“);}/*未找到信息時的處理*/

}

void del_stu()

{

STU * p = NULL

If(head==NULL) //判斷鏈表是否為空。

{

PF("文檔中沒有記錄!\ n ");

返回;

}

其他

{

第[20]號字符;

PF("請輸入學號:\ t ");

scanf("%s ",否);

for(p =頭;p!= NULLp = p-& gt;下壹個)

{

如果(!strcmp(p-& gt;下壹個-& gt;否,否))//驗證信息是否正確。

{

PF ("* * * * * * * * * * * * * * * *您要刪除的學生是* * * * * * * * * * * * * * * * * * * * * * \ n ")。

pf(" \ t \ t學生ID: \t%s\n ",p-& gt;下壹個-& gt;否);

pf(" \ t \ t學生姓名:\t%s\n ",p-& gt;下壹個-& gt;姓名);

pf(" \ t \ t學生年齡:\t%d\n ",p-& gt;下壹個-& gt;年齡);

pf(" \ t \ t學生性別:\t%s\n ",p-& gt;下壹個-& gt;性);

PF(" \ t \ t學生的出生日期:\t%s\n ",p-& gt;下壹個-& gt;生日);

pf(" \ t \ t學生地址:\t%s\n ",p-& gt;下壹個-& gt;地址);

pf(" \ t \ t學生電話:\t%s\n ",p-& gt;下壹個-& gt;電話);

pf(" \ t \ t學生電子郵件:\t%s\n ",p-& gt;下壹個-& gt;電子郵件);

PF(" \ n ");//輸出要刪除的信息

I = 1;

如果(p->;下壹個-& gt;下壹個)

{

printf(" first \ n ");

p->;next = p-& gt;下壹個-& gt;接下來;

}

其他

p->;next = NULL

n-;

save();

返回;

}

}如果(!我)

{PF("沒有這個學生的信息!請查收:“);}/*未找到信息時的處理*/

返回;

}

}

//# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

//使用NUM全局變量來控制冒泡循環的次數。添加或刪除記錄後,請務必使用n++或N-。

void arrage _ stu()

{

STU *cur,* s;

int in=0,j;

if(head-& gt;next==NULL)

{//先判斷

Printf("妳還沒錄,所以不能排序\ n ");

返回;

}

printf("n=%d ",n);

cur=head->接下來;

for(in = 0;在& ltn-1;在++中)

for(j=0,cur = head->;接下來;j & lt=n進3;cur=cur->接下來,j++)

{

If(j==0)//第壹次比較第壹個和第二個節點信息。

{

if(cur-& gt;否& gtcur->;下壹個-& gt;否)//將cur本身與cur的下壹個節點進行比較。

{

s=cur->接下來;

cur->;next = cur-& gt;下壹個-& gt;接下來;

s-& gt;next = cur

head->;next = s;

cur=head->接下來;//將值重新賦給CUR

/*

cur=head->接下來;

cur = s;

錯誤:如果壹個變量=它的前壹個節點的下壹個,不能說給它賦另壹個變量就能改變它。

前壹個節點的下壹個,他只能操作後壹個節點!!!

*/

}

}

if(cur-& gt;下壹個-& gt;否& gtcur->;下壹個-& gt;下壹個-& gt;NO)//比較cur的下壹個節點和cur的下兩個節點。

{

s=cur->接下來;

cur->;next = cur-& gt;下壹個-& gt;接下來;

s-& gt;next = cur-& gt;下壹個-& gt;接下來;

cur->;下壹個-& gt;next = s;

}

}

if(head-& gt;下壹個-& gt;否& gthead->;下壹個-& gt;下壹個-& gt;否)//只有兩個節點時,直接比較。

{

cur=head->接下來;

head->;next = cur-& gt;接下來;

cur->;next = cur-& gt;下壹個-& gt;接下來;

head->;下壹個-& gt;next = cur

If(n==2)//當只有兩個節點時,將第二個節點的下壹個留空。

head->;下壹個-& gt;下壹個-& gt;next = NULL

}

}

無效保存()

{

printf(" * * * * * * * * * * * * * * * *保存信息並結束* * * * * * * * * * * * * * * * * * * *);

STU * p = NULL

FILE * fp

char * filename = " fname.txt

If ((fp = fopen ("fname.txt "," w "))= = null)//錯誤檢測

{

printf(" \ n無法打開文件!\ n ");

返回;

}

if(head-& gt;next==NULL)

{

printf(" \ n信息為空!\ n ");

返回;

}

其他

p = head-& gt;接下來;

而(p!=空)

{

fprintf(fp," %s %s %d %s %s %s %s %s\n ",p-& gt;不,p-& gt;姓名,p-& gt;年齡,

p->;性,p-& gt;生日,p-& gt;地址,p-& gt;電話,p-& gt;電子郵件);//保存到文件

p = p-& gt;接下來;

}

Printf("保存了!\ n ");

fclose(FP);

//exit(0);

}

  • 上一篇:在ASP.NET中使用Memcached
  • 下一篇:本田雅閣行情調查,鄭州地區優惠大促銷,最高優惠1.3萬元
  • copyright 2024編程學習大全網