學生信息包括:學號,姓名,年齡,性別,出生日期,地址,電話號碼,
電子郵件等等。實現的功能:
(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);
}