#include<stdio.h>#include<string.h>#include<stdlib.h>struct Telephone{ char number[20]; char name[20]; char sex[20]; char age[20]; char speciaity[20]; char Class[20]; struct Telephone *next;};typedef struct Telephone TEL;TEL *head=NULL;void showmenu(); //選單void Appenditem(); //添加學生資訊void print(); //瀏覽所有學生資訊void Finditem1(); //查找學生資訊 (按學號)void Finditem2(); //查找學生資訊 (按姓名)void Removeitem(); //洗掉學生資訊 void Saveandfree(); //保存到檔案void Open(); //打開檔案void main(){ char ch; Open(); //打開檔案 while(1) { showmenu(); //顯示選單 scanf(" %c",&ch); switch(ch) { case '1':Appenditem(); //添加學生資訊 break; case '2':print(); //瀏覽所有學生資訊 break; case '3':Finditem1(); //查找學生資訊1.按學號 break; case '4':Finditem2(); //查找學生資訊2.按姓名 break; case '5':Removeitem(); //洗掉學生資訊資訊 print(); //輸出洗掉后的結果 break; case '0':Saveandfree(); //保存并釋放記憶體 exit(0); //退出系統 break; default: printf("選擇錯誤!"); break; } }}//選單void showmenu(){ printf("\n*****************歡迎使用學生資訊管理系統*****************\n"); printf("\n*****************根據主選單提示選擇所想要的操作*****************\n"); printf("\t1.添加學生資訊\n"); printf("\t2.瀏覽所有學生資訊\n"); printf("\t3.按學號查詢學生資訊\n"); printf("\t4.按姓名查詢學生資訊\n"); printf("\t5.洗掉學生資訊\n"); printf("\t0.保存并退出系統!\n"); printf("*************************************************\n"); printf("\t請選擇:\n");}//添加學生資訊void Appenditem(){ TEL *p1=NULL,*p2=NULL; p1=(TEL *)malloc(sizeof(TEL)); //申請結點 printf("輸入學號:\n"); //添加資訊 scanf("%s",p1->number); printf("輸入姓名:\n"); scanf("%s",p1->name); printf("輸入性別:\n"); scanf("%s",p1->sex); printf("輸入年齡:\n"); scanf("%s",p1->age); printf("輸入專業:\n"); scanf("%s",p1->speciaity); printf("輸入班級:\n"); scanf("%s",p1->Class); p1->next=NULL; //保存到鏈表 if(head==NULL) { head=(TEL *)malloc(sizeof(TEL)); //申請空間 head->next=p1; } else { for(p2=head;p2->next!=NULL;p2=p2->next); //找到結點尾 p2->next=p1; } printf("此資訊已添加!");}//瀏覽所有學生資訊void print(){ TEL *p=NULL; if(head==NULL) { printf("此學生資訊管理系統中無記錄,請輸入記錄后在使用本功能!\n"); return; } printf("**************學生資訊管理系統*********************\n"); //輸出資訊 printf("學號\t姓名\t性別\t年齡\t專業\t班級\n"); for(p=head->next;p!=NULL;p=p->next) printf("%s\t%s\t%s\t%s\t%s\t%s\n",p->number,p->name,p->sex,p->age,p->speciaity,p->Class); }//查找學生資訊1.按學號void Finditem1(){ TEL *p; char findname[20]; printf("請輸入要查找的學號:\n"); scanf("%s",findname); printf("**************學生資訊管理系統*********************\n"); printf("學號\t姓名\t性別\t年齡\t專業\t班級\n"); for(p=head->next;p!=NULL;p=p->next) { if(strcmp(p->number,findname)==0) printf("%s\t%s\t%s\t%s\t%s\t%s\n",p->number,p->name,p->sex,p->age,p->speciaity,p->Class); }}//查找學生資訊2.按姓名void Finditem2(){ TEL *p; char name[20]; printf("請輸入要查找的姓名:\n"); scanf("%s",name); printf("**************學生資訊管理系統*********************\n"); printf("學號\t姓名\t性別\t年齡\t專業\t班級\n"); for(p=head->next;p!=NULL;p=p->next) { if(strcmp(p->name,name)==0) printf("%s\t%s\t%s\t%s\t%s\t%s\n",p->number,p->name,p->sex,p->age,p->speciaity,p->Class); }}//洗掉學生的資訊void Removeitem(){ char findname[20]; //先查找 后洗掉 TEL *p = head->next, *pr = head->next; printf("請輸入要洗掉的學號:\n"); scanf(" %s",&findname); if (head->next == NULL) { printf("無此節點!\n"); return; } while ((strcmp(p->name,findname)!=0 )&& p->next != NULL) { pr =p; p =p->next; } if (strcmp(findname, p->name)==0) //輸出洗掉資訊 { printf("%s\t%s\t%s\t%s\t%s\t%s\n",p->next->number,p->next->name,\ p->next->sex,p->next->age,p->speciaity,p->Class); if (p == head->next) head->next = p->next; else pr->next = p->next; free(p); } printf("此資訊已洗掉!"); }//保存鏈表資訊到檔案并釋放記憶體空間void Saveandfree(){ TEL *p=NULL; FILE *fp; char *Book="books.txt"; if(head==NULL) { printf("\n記錄為空!\n"); return; } else p=head->next; if((fp=fopen(Book,"wb+"))==NULL) { printf("\n打不開檔案!\n"); return; } while(p!=NULL) //保存資訊 { fwrite(p,sizeof(TEL),1,fp); p=p->next; } printf("保存完畢!"); fclose(fp);//*****釋放鏈表空間***** for(;head->next!=NULL;) { p=head->next; head->next=head->next->next; free(p); } free(head);}//檔案資訊輸出到鏈表void Open(){ FILE *fp; TEL *p1=NULL,*p2=NULL,*temp=NULL; if((fp=fopen("books.txt","rb+"))==NULL) { printf("\n****************這是一個新的學生資訊管理系統******************\n"); return; } head=(TEL *)malloc(sizeof(TEL)); head->next=NULL; temp=p2=head; while(! feof(fp)) //回圈讀取 { p1=(TEL *)malloc(sizeof(TEL)); temp=p2; p2->next=p1; p2=p1; fread(p1,sizeof(TEL),1,fp); } temp->next=NULL; fclose(fp); //關閉檔案}
uj5u.com熱心網友回復:
為什么都喜歡這么發代碼呢?自己看著代碼好看懂邏輯嗎?~
uj5u.com熱心網友回復:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct Telephone{
char number[20];
char name[20];
char sex[20];
char age[20];
char speciaity[20];
char Class[20];
struct Telephone *next;
};
typedef struct Telephone TEL;
TEL *head=NULL;
void showmenu(); //選單
void Appenditem(); //添加學生資訊
void print(); //瀏覽所有學生資訊
void Finditem1(); //查找學生資訊 (按學號)
void Finditem2(); //查找學生資訊 (按姓名)
void Removeitem(); //洗掉學生資訊
void Saveandfree(); //保存到檔案
void Open(); //打開檔案
void main()
{
char ch;
Open(); //打開檔案
while(1) {
showmenu(); //顯示選單
scanf(" %c",&ch);
switch(ch) {
case '1':
Appenditem(); //添加學生資訊
break;
case '2':
print(); //瀏覽所有學生資訊
break;
case '3':
Finditem1(); //查找學生資訊1.按學號
break;
case '4':
Finditem2(); //查找學生資訊2.按姓名
break;
case '5':
Removeitem(); //洗掉學生資訊資訊
print(); //輸出洗掉后的結果
break;
case '0':
Saveandfree(); //保存并釋放記憶體
exit(0); //退出系統
break;
default:
printf("選擇錯誤!");
break;
}
}
}
//選單
void showmenu()
{
printf("\n*****************歡迎使用學生資訊管理系統*****************\n");
printf("\n*****************根據主選單提示選擇所想要的操作*****************\n");
printf("\t1.添加學生資訊\n");
printf("\t2.瀏覽所有學生資訊\n");
printf("\t3.按學號查詢學生資訊\n");
printf("\t4.按姓名查詢學生資訊\n");
printf("\t5.洗掉學生資訊\n");
printf("\t0.保存并退出系統!\n"); printf("*************************************************\n");
printf("\t請選擇:\n");
}
//添加學生資訊
void Appenditem()
{
TEL *p1=NULL,*p2=NULL;
p1=(TEL *)malloc(sizeof(TEL)); //申請結點
printf("輸入學號:\n"); //添加資訊
scanf("%s",p1->number);
printf("輸入姓名:\n");
scanf("%s",p1->name);
printf("輸入性別:\n");
canf("%s",p1->sex);
printf("輸入年齡:\n");
scanf("%s",p1->age);
printf("輸入專業:\n");
scanf("%s",p1->speciaity);
printf("輸入班級:\n");
scanf("%s",p1->Class);
p1->next=NULL; //保存到鏈表
if(head==NULL) {
head=(TEL *)malloc(sizeof(TEL)); //申請空間
head->next=p1;
} else {
for(p2=head;p2->next!=NULL;p2=p2->next); //找到結點尾
p2->next=p1;
}
printf("此資訊已添加!");
}
//瀏覽所有學生資訊
void print()
{
TEL *p=NULL;
if(head==NULL) {
printf("此學生資訊管理系統中無記錄,請輸入記錄后在使用本功能!\n");
return;
}
printf("**************學生資訊管理系統*********************\n"); //輸出資訊
printf("學號\t姓名\t性別\t年齡\t專業\t班級\n");
for(p=head->next;p!=NULL;p=p->next)
printf("%s\t%s\t%s\t%s\t%s\t%s\n",p->number,p->name,p->sex,p->age,p->speciaity,p->Class);
}
//查找學生資訊1.按學號
void Finditem1()
{
TEL *p;
char findname[20];
printf("請輸入要查找的學號:\n");
scanf("%s",findname);
printf("**************學生資訊管理系統*********************\n");
printf("學號\t姓名\t性別\t年齡\t專業\t班級\n");
for(p=head->next;p!=NULL;p=p->next) {
if(strcmp(p->number,findname)==0)
printf("%s\t%s\t%s\t%s\t%s\t%s\n",p->number,p->name,p->sex,p->age,p->speciaity,p->Class);
}
}
//查找學生資訊2.按姓名
void Finditem2()
{
TEL *p;
char name[20];
printf("請輸入要查找的姓名:\n");
scanf("%s",name);
printf("**************學生資訊管理系統*********************\n");
printf("學號\t姓名\t性別\t年齡\t專業\t班級\n");
for(p=head->next;p!=NULL;p=p->next) {
if(strcmp(p->name,name)==0)
printf("%s\t%s\t%s\t%s\t%s\t%s\n",p->number,p->name,p->sex,p->age,p->speciaity,p->Class);
}
}
//洗掉學生的資訊
void Removeitem()
{
char findname[20]; //先查找 后洗掉
TEL *p = head->next, *pr = head->next;
printf("請輸入要洗掉的學號:\n");
scanf(" %s",&findname);
if (head->next == NULL) {
printf("無此節點!\n");
return;
}
while ((strcmp(p->name,findname)!=0 )&& p->next != NULL) {
pr =p;
p =p->next;
}
if (strcmp(findname, p->name)==0) //輸出洗掉資訊
{
printf("%s\t%s\t%s\t%s\t%s\t%s\n",p->next->number,p->next->name,\
p->next->sex,p->next->age,p->speciaity,p->Class);
if (p == head->next)
head->next = p->next;
else
pr->next = p->next;
free(p);
}
printf("此資訊已洗掉!");
}
//保存鏈表資訊到檔案并釋放記憶體空間
void Saveandfree()
{
TEL *p=NULL;
FILE *fp;
char *Book="books.txt";
if(head==NULL) {
printf("\n記錄為空!\n");
return;
}
else
p=head->next;
if((fp=fopen(Book,"wb+"))==NULL) {
printf("\n打不開檔案!\n");
return;
}
while(p!=NULL) //保存資訊
{
fwrite(p,sizeof(TEL),1,fp);
p=p->next;
}
printf("保存完畢!");
fclose(fp);
//*****釋放鏈表空間*****
for(;head->next!=NULL;) {
p=head->next;
head->next=head->next->next;
free(p);
}
free(head);
}
//檔案資訊輸出到鏈表
void Open()
{
FILE *fp;
TEL *p1=NULL,*p2=NULL,*temp=NULL;
if((fp=fopen("books.txt","rb+"))==NULL) {
printf("\n****************這是一個新的學生資訊管理系統******************\n");
return;
}
head=(TEL *)malloc(sizeof(TEL));
head->next=NULL;
temp=p2=head;
while(! feof(fp)) //回圈讀取
{
p1=(TEL *)malloc(sizeof(TEL));
temp=p2;
p2->next=p1;
p2=p1;
fread(p1,sizeof(TEL),1,fp);
}
temp->next=NULL;
fclose(fp); //關閉檔案
}
uj5u.com熱心網友回復:
是不是因為保存的字串沒有使用 null-terminated string 的原因,試試在每個要保存的字串后加個'\n'。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/266452.html
標籤:C語言
上一篇:關于#pragma comment(linker, "/EXPORT:MyFunction=?MyFunction@@YGHH@Z")
