第一篇:C語言大作業(yè)——學生通訊錄管理系統(tǒng)
#include
struct message
//定義結構體
{
char name[15];
char number[15];
char phone[15];
char qq[13];
char addr[25];
struct message *next;
//指向下一數(shù)據(jù)
};
int n;
void creat()
//建立電話簿
{
int num;char choice[5]={'2'};
FILE *fp;
struct message *head;
struct message *p,*q;
n = 0;
p = q =(struct message *)malloc(LEN);
fp=fopen(“通訊錄1.txt”,“wb”);
system(“cls”);
printf(“n請輸入姓名:”);
scanf(“%s”,p->name);
printf(“n請輸入電話號碼:”);
scanf(“%s”,p->phone);
printf(“n請輸入學號:”);
scanf(“%s”,p->number);
printf(“n請輸入QQ:”);
scanf(“%s”,p->qq);
printf(“n請輸入住址:”);
scanf(“%s”,p->addr);
fwrite(p,LEN,1,fp);
fclose(fp);
head = 0;
num = 1;
while(num!=0)
{
n = n+1;
if(n==1)head = p;
else q->next = p;
q = p;
p =(struct message *)malloc(LEN);
//分配存儲區(qū)
while(choice[0]!='1' && choice[0]!='0')
//判斷是否繼續(xù)
{
printf(“n1 繼續(xù)輸入n 0 返回n”);
printf(“請選擇操作:”);
scanf(“%s”,choice);
}
switch(choice[0])
{
case '1':
{
fp=fopen(“通訊錄1.txt”,“rb”);
system(“cls”);
printf(“n請輸入姓名:”);
scanf(“%s”,p->name);
printf(“n請輸入電話號碼:”);
scanf(“%s”,p->phone);
printf(“n請輸入學號:”);
scanf(“%s”,p->number);
printf(“n請輸入QQ:”);
scanf(“%s”,p->qq);
printf(“n請輸入住址:”);
scanf(“%s”,p->addr);
fwrite(p,LEN,1,fp);
fclose(fp);
choice[0] = '2';
}
continue;
case '0': num = 0;
system(“cls”);
}
}
q->next = 0;}
void add()
//添加通訊錄 {
int num;char choice[5]={'2'};
FILE *fp;
struct message *head;
struct message *p,*q;
n = 0;
p = q =(struct message *)malloc(LEN);
fp=fopen(“通訊錄1.txt”,“ab”);
system(“cls”);
printf(“n請輸入姓名:”);
scanf(“%s”,p->name);
printf(“n請輸入電話號碼:”);
scanf(“%s”,p->phone);
printf(“n請輸入學號:”);
scanf(“%s”,p->number);
printf(“n請輸入QQ:”);
scanf(“%s”,p->qq);
printf(“n請輸入住址:”);
scanf(“%s”,p->addr);
fwrite(p,LEN,1,fp);
fclose(fp);
head = 0;
num = 1;
while(num!=0)
{
n = n+1;
if(n==1)head = p;
else q->next = p;
q = p;
p =(struct message *)malloc(LEN);
while(choice[0]!='1' && choice[0]!='0')
否繼續(xù)
{
printf(“n1 繼續(xù)輸入n 0 返回n”);
printf(“請選擇操作:”);
scanf(“%s”,choice);
}
//分配空間 //輸入內(nèi)容
//分配空間
//判斷是
switch(choice[0])
{
case '1':
{
fp=fopen(“通訊錄1.txt”,“rb”);
system(“cls”);
printf(“n請輸入姓名:”);
scanf(“%s”,p->name);
printf(“n請輸入電話號碼:”);
scanf(“%s”,p->phone);
printf(“n請輸入學號:”);
scanf(“%s”,p->number);
printf(“n請輸入QQ:”);
scanf(“%s”,p->qq);
printf(“n請輸入住址:”);
scanf(“%s”,p->addr);
fwrite(p,LEN,1,fp);
fclose(fp);
choice[0] = '2';
}
continue;
case '0': num = 0;
system(“cls”);
}
}
q->next = 0;}
void findname(struct message * fphead)
{
struct message *p;
int a = 0;
char findname[20];
system(“cls”);
printf(“請輸入要查找的姓名:n”);
scanf(“%s”,findname);
for(p=fphead->next;p!=NULL;p=p->next)
{
if(strcmp(p->name,findname)==0)
{
//按姓名查找
printf(“姓名
電話號碼
學號
住址n”);
printf(“%-15s %-15s %-15s %-13s %-25sn”,p->name,p->phone,p->number,p->qq,p->addr);
a = 1;
}
}
if(a!= 1)
printf(“無此通訊錄!n”);
} void findphone(struct message * fphead)
//按電話查找
{
struct message *p;
int a = 0;
char findphone[15];
system(“cls”);
printf(“請輸入要查找的電話:n”);
scanf(“%s”,findphone);
for(p=fphead->next;p!=NULL;p=p->next)
{
if(strcmp(p->phone,findphone)==0)
{
printf(“姓名
電話號碼
學號
住址n”);
printf(“%-15s %-15s %-15s %-13s %-25sn”,p->name,p->phone,p->number,p->qq,p->addr);
a = 1;
}
}
if(a!= 1)
printf(“無此通訊錄!n”);
}
void findnumber(struct message * fphead)
//按學號查找
{
struct message *p;
int a = 0;
char findnumber[15];
system(“cls”);
printf(“請鍵入要查找的學生學號:n”);
scanf(“%s”,findnumber);
for(p=fphead->next;p!=NULL;p=p->next)
{
if(strcmp(p->number,findnumber)==0)
{
printf(“姓名
電話號碼
學號
住址n”);
printf(“%-15s %-15s %-15s %-13s %-25sn”,p->name,p->phone,p->number,p->qq,p->addr);
a = 1;
}
}
if(a!= 1)
printf(“無此通訊錄!n”);
}
void modify(struct message * fphead)
//修改記錄
{
FILE *fp;
struct message *p,*q;
int a = 0;
char findname[15];
system(“cls”);
printf(“請鍵入要查找的姓名:n”);
scanf(“%s”,findname);
for(p=fphead->next;p!=NULL;p=p->next)
{
if(strcmp(p->name,findname)==0)
{
printf(“姓名
電話號碼
學號
住址n”);
printf(“%-15s %-15s %-15s %-13s %-25snnnn”,p->name,p->phone,p->number,p->qq,p->addr);
printf(“n請鍵入新姓名:”);
scanf(“%s”,p->name);
printf(“n請鍵入新電話號碼:”);
scanf(“%s”,p->phone);
printf(“n請鍵入新學號:”);
scanf(“%s”,p->number);
printf(“n請鍵入新QQ:”);
scanf(“%s”,p->qq);
printf(“n請鍵入新住址:”);
scanf(“%s”,p->addr);
fp = fopen(“通訊錄2.txt”,“wb”);
q = fphead->next;
//P為鏈表頭指針
while(q!=0)
{
fwrite(q,LEN,1,fp);
if(q->next!=0)
q = q->next;
else
q = 0;
}
fclose(fp);
unlink(“通訊錄1.txt”);
//用新文件覆蓋原文件
rename(“通訊錄2.txt”, “通訊錄1.txt”);
printf(“修改成功!”);
a = 1;
}
}
if(a!= 1)
printf(“無此通訊錄!n”);
}
void del(struct message * fphead)
//刪除記錄
{
FILE *fp,*fq;
struct message *p,*q,*r;
char sname[15];
p = q =(struct message *)malloc(LEN);
p = fphead;
system(“cls”);
fp = fopen(“通訊錄1.txt”,“rb”);
fq = fopen(“通訊錄2.txt”,“wb”);
printf(“請輸入欲刪除記錄的姓名:”);
scanf(“%s”,sname);
while(strcmp(p->name,sname)!=0 && p->next!=0)//查找節(jié)點并刪除該節(jié)點
{
q = p;
p = p->next;
}
if(strcmp(p->name,sname)==0)
{
if(p==fphead)
fphead = p->next;
else
{
q->next = p->next;
}
r = fphead->next;
//r為鏈表頭指針
while(r!=0)
{
fwrite(r,LEN,1,fq);
if(r->next!=0)
r = r->next;
else
r = 0;
}
printf(“刪除成功!”);
}
else
{
printf(“無此通訊錄!”);
}
fclose(fp);
fclose(fq);
unlink(“通訊錄1.txt”);
//用新文件覆蓋原文件
rename(“通訊錄2.txt”, “通訊錄1.txt”);
}
struct message * open(void)
//打開文件,載入鏈表
{
FILE *fp;
struct message *p=NULL,*q=NULL,*temp=NULL,*fphead=NULL;
fp=fopen(“通訊錄1.txt”,“rb”);
fphead=(struct message *)malloc(LEN);
//分配空間
temp = q = fphead;
while(!feof(fp))
//循環(huán)讀取,載入鏈表
{
p=(struct message *)malloc(LEN);
temp=q;
q->next=p;
q=p;
fread(p,LEN,1,fp);
}
temp->next=NULL;
fclose(fp);
return(fphead);
//返回鏈表頭指針
}
void print()
//顯示通訊錄
{
struct message *p;
FILE *fp;
system(“cls”);
if((fp=fopen(“通訊錄1.txt”,“rb”))!=NULL)
{
printf(“姓名
電話號碼
學號
住址n”);
p =(struct message *)malloc(LEN);
//分配空間
while(!feof(fp))
{
fread(p,LEN,1,fp);
printf(“%-15s %-15s %-15s %-13s %-25sn”,p->name,p->phone,p->number,p->qq,p->addr);
}
fclose(fp);
}
else
{
printf(“未建立通訊錄!”);
} }
void main()
//主函數(shù) {
FILE * fp;
struct message * fphead;
int begin = 1,f;
char choice[5];
while(begin == 1)
{
printf(“tt>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>n”);
printf(“tttt歡迎使用學生通訊錄n”);
printf(“tt<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< printf(“ttt*主窗口菜單*nn”); printf(“ttt1:顯示通訊錄中所有記錄;nn”); printf(“ttt2:建立新通訊錄;nn”); printf(“ttt3:添加新記錄;nn”); printf(“ttt4:查詢通訊錄中的記錄;nn”); printf(“ttt5:修改通訊錄中的記錄;nn”); printf(“ttt6:刪除通訊錄中的記錄;nn”); printf(“ttt0:退出通訊錄nn”); printf(“請選擇操作:”); scanf(“%s”,choice); switch(choice[0]) { case '1': { print(); printf(“按任意鍵返回主菜單!n”); getch(); system(“cls”); } continue; case '2': { creat(); } continue; case '3': { add(); } continue; case '4': { if((fp = fopen(“通訊錄1.txt”,“rb”))!= NULL) { fclose(fp); system(“cls”); printf(“1按姓名查詢;n2按電話查詢;n3按學號查詢;n”); printf(“請輸入查詢方式:”); scanf(“%d”,&f); if(f==1) { fphead = open(); findname(fphead); } if(f==2) { fphead = open(); findphone(fphead); } else if(f==3) { fphead = open(); findnumber(fphead); } } else { system(“cls”); printf(“未建立通訊錄!”); } printf(“按任意鍵返回主菜單!n”); getch(); system(“cls”); } continue; case '5': { if((fp = fopen(“通訊錄1.txt”,“rb”))!= NULL) { fclose(fp); fphead = open(); modify(fphead); } else { system(“cls”); printf(“未建立通訊錄!”); } printf(“按任意鍵返回主菜單!n”); getch(); system(“cls”); }continue; case '6': { if((fp = fopen(“通訊錄1.txt”,“rb”))!= NULL) { fclose(fp); fphead = open(); del(fphead); } else { system(“cls”); printf(“未建立通訊錄!”); } printf(“按任意鍵返回主菜單!n”); getch(); system(“cls”); } continue; case '0': exit(0); default: { system(“cls”); printf(“輸入錯誤,按任意鍵返回主菜單!n”); getch(); system(“cls”); } } } system(“pause”);} “學生通訊信息記錄系統(tǒng)”的設計與實現(xiàn) 一、設計要求 1.問題的描述 “學生通訊信息記錄系統(tǒng)”是為了實現(xiàn)快速的對學生信息進行錄入、刪除、查找、顯示。各個功能靠函數(shù)實現(xiàn)。2.需求分析 (1)應該包括以下功能:輸入信息、顯示信息、查找以姓名作為關鍵字、刪除信息(2)作為一個完整的系統(tǒng),應具有友好的界面和較強的容錯能力 二、概要設計 1.主界面設計 2.儲存結構設計 本系統(tǒng)主要采用鏈表類型來表示儲存“學生信息記錄系統(tǒng)”中的信息。程序中定義了address結構。其中,包括學生的姓名、宿舍信息和學號。3.系統(tǒng)功能的設計 1)輸入信息——enter();2)顯示信息———display();3)查找以姓名作為關鍵字 ———search();4)刪除信息———delete(); 三、模塊設計 1.模塊設計 本成績包含兩個模塊:主程序模塊和鏈表操作模塊。2.系統(tǒng)的程序及功能設計 (1)插入學生信息 void enter() /*輸入函數(shù),本函數(shù)循環(huán)輸入資料,當輸入姓名為空時退出*/ { struct address *info; /*定義當前結點*/ for(;;){ info=(struct address *)malloc(sizeof(struct address)); /*為當前結點分配空間*/ if(!info) { printf(“n Out of memory”); exit(0); /*如果分配空間失敗,退出程序*/ } printf(“輸入空姓名結束:n”); inputs(“請輸入 姓名:”,info->name,10); if(!info->name[0]) break; /*如果輸入姓名為空,結束循環(huán)*/ inputs(“請輸入 院系:”,info->street,50); inputs(“請輸入宿舍樓:”,info->city,15); inputs(“請輸入宿舍號:”,info->state,15); inputs(“請輸入 學號:”,info->eip,7); insert(info,&start,&last); /*調(diào)用結點插入函數(shù)*/ } } 五、測試分析 1.輸入學生信息 4.刪除信息 5.退出 struct address *start; /*首結點*/ struct address *last; /*尾結點*/ struct address *find(char *); /*聲明查找函數(shù)*/ void enter(); /*函數(shù)聲明*/ void search();void save(); void load();void list();void ddelete(struct address **start,struct address **last);void insert(struct address *i,struct address **start,struct address **last);void inputs(char *,char *,int);void display(struct address *);int menu_select(void); void main(){ int c; printf(“n 歡迎使用學生通訊錄系統(tǒng)”); printf(“nn”); printf(“t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓n”); printf(“t┃************************************************************┃n”); printf(“t┃* * *┃n”); printf(“t┃* 1.輸入信息 * 2.刪除信息 *┃n”); printf(“t┃* * *┃n”); printf(“t┃************************************************************┃n”); printf(“t┃* * *┃n”); printf(“t┃* 3.顯示信息 * 4.查找 *┃n”); printf(“t┃* * *┃n”); printf(“t┃************************************************************┃n”); printf(“t┃ 5.退出 ┃ n”); printf(“t┃************************************************************┃n”); exit(0); /*如果分配空間失敗,退出程序*/ } printf(“輸入空姓名結束:n”); inputs(“請輸入 姓名:”,info->name,10); if(!info->name[0])break; /*如果輸入姓名為空,結束循環(huán)*/ inputs(“請輸入 院系:”,info->street,50); inputs(“請輸入宿舍樓:”,info->city,15); inputs(“請輸入宿舍號:”,info->state,15); inputs(“請輸入 學號:”,info->eip,7); insert(info,&start,&last); /*調(diào)用結點插入函數(shù)*/ } void inputs(char *prompt,char *s,int count) /*輸入函數(shù),有越界檢測功能*/ { char p[255]; do } i->next=NULL; i->prior=NULL; *last=i; *start=i; return; } else { (*last)->next=i; i->prior=*last;i->next=NULL; *last=(*last)->next; } } void ddelete(struct address **start,struct address **last) /*刪除函數(shù)*/ { struct address *info; char s[80]; inputs(“請輸入 姓名:”,s,10); /*輸入欲刪除結點的name域內(nèi)容*/ info=find(s); if(info) { printf(“Deleting......n”);if(*start==info) 點的下驅(qū)作為新的首結點(入口)*/ { *start=info->next; if(*start)(*start)->prior=NULL; else *last=NULL; } else 結點*/ { info->prior->next=info->next; info=info->next; } printf(“未找到相關信息.n”); return NULL;} /*輸出整個鏈表*/ void list(void){ struct address *info; info=start; if(info==NULL)printf(“當前記錄為空!”);else printf(“姓名t院系t宿舍樓t宿舍號t學號tn”); while(info) { };display(info);if(info->next==NULL){break;} info=info->next; printf(“nn”);} /*查找函數(shù)*/ /*輸入欲查找的姓名*/ /*如果沒找到,顯示Not found*/ /*如果找到,顯示該結點資料*/ 七、用戶使用手冊 (1)本程序的執(zhí)行文件為“學生通訊錄管理系統(tǒng).exe”。 (2)進入本系統(tǒng)之后,隨即顯示系統(tǒng)住菜單界面。用戶可以在該界面下根據(jù)提示輸入并按回車鍵確定,執(zhí)行相應的菜單命令。 (3)本系統(tǒng)可以對學生信息進行錄入和刪除。 數(shù)據(jù)結構課程設計 課題:學生成績管理系統(tǒng) 姓名:孫軒宇 學號:E01014316 專業(yè):計算機科技 院系:計科院 2010.10.8 班級:10 #include “stdio.h” #include “stdlib.h” #include “string.h” #include “conio.h” #include “stdlib.h” #define null 0 struct record { char name[20];char phone[20];char adress[40];char postcode[10];char e_mail[30];}student[500];struct LinkList { struct record US;struct LinkList *next;}a;struct LinkList *head=null;int num=0;FILE *fp;int menu_select();int adduser();int list();int search();int display();int add();int listbyname();int dele();int save();int exit(); void main(){ system(“cls”);for(;;){ switch(menu_select()){ case 0:adduser();break;case 1:list();break;case 2:search();break;case 3:add();break;case 4:dele();break;case 5:save();break;case 6:exit(0);} } } menu_select(){ char s[80];int a;printf(“*_* press any key enter menu!*_* n”);getch();system(“cls”);printf(“tt********************MENU*********************nn”);printf(“tt 0.輸入記錄n”);printf(“tt 1.顯示記錄 n”);printf(“tt 2.按姓名查找n”);printf(“tt 3.插入記錄 n”);printf(“tt 4.刪除記錄n”);printf(“tt 5.記錄保存文件n”);printf(“tt 6.Quitn”);printf(“tt***********************************************n”);do{ printf(“n Enter you choice(0~11):”);scanf(“%s”,s);a=atoi(s);} while(a<0||a>11);return a;} adduser(){ printf(“ntt**************** 請輸入用戶信息 ****************n”);printf(“ntt輸入姓名:”);scanf(“%s”,&student[num].name);printf(“ntt輸入電話號碼:”);scanf(“%s”,&student[num].phone);printf(“ntt輸入地址:”);scanf(“%s”,&student[num].adress);printf(“ntt輸入郵編:”);scanf(“%s”,&student[num].postcode);printf(“ntt輸入e-mail:”);scanf(“%s”,&student[num].e_mail);num++;printf(“ntt是否繼續(xù)添加?(Y/N):”);if(getch()=='y')adduser();return(0);} list(){ int i;system(“cls”);if(num!=0){ printf(“ntt*************** 以下為通訊錄所有信息************”);for(i=0;i printf(“ntt姓名: %s”,student[i].name);printf(“ntt電話: %s”,student[i].phone);printf(“ntt地址: %s”,student[i].adress);printf(“ntt郵編: %s”,student[i].postcode);printf(“ntte-mail:%s”,student[i].e_mail);printf(“tt”);if(i+1 add(){ int i;if((fp=fopen(“student.bin”,“wb”))==NULL){ printf(“ntt文件打開失敗”);} for(i=0;i save(){ int j;FILE*fp;fp=fopen(“student.txt”,“w”);if(fp==NULL)printf(“can't open the file.”);if(num!=0){ for(j=0;j fwrite(student,sizeof(student),1,fp);} } printf(“保存成功!”);fclose(fp);return(0);} #include intfind_record(int flag);intdelete_record(int flag);voidpaixu_record(int flag);intsave_record(int flag);void main(){ for(;;){ switch(menu_select()) { case 1: printf(“ ***********************************************n”);printf(“ ************** 通訊錄的建立 ***************n”);printf(“ ***********************************************n”);flag=create_record();break;case 2: printf(“ ***********************************************n”);printf(“ ************** 通訊錄信息的添加 *****************n”);printf(“ ***********************************************n”);flag=add_record(flag);break;case 3: printf(“ ******************************n”);printf(“ ******* 通訊錄信息查詢 *******n”);printf(“ ******************************n”);find_record(flag); break;case 4: printf(“ ***********************************n”);printf(“ **********通訊信息的刪除***********n”);printf(“ ***********************************n”);delete_record(flag);break;case 5: printf(“ ***********************************n”);printf(“ **********通訊錄的存儲(D:)*********n”);printf(“ ***********************************n”);save_record(flag);break;case 6: printf(“ ***********************************n”);printf(“ **********通訊者的排序*********n”);printf(“ ***********************************n”);paixu_record(flag);break;case 0: printf(“t 謝謝您的使用!n”);break; default : break;} } } intmenu_select(){ int i;printf(“ ******************** n”);printf(“ Welcome! n ”);printf(“ Form kuangminn”);printf(“ ******************** n”);printf(“ n”);printf(“ n”);printf(“ n”);printf(“ 通訊錄管理系統(tǒng) n”);printf(“ n”);printf(“ ======================n”);printf(“ 1.通訊錄的建立n”);printf(“ 2.通訊者的添加n”);printf(“ 3.通訊錄的查詢n”);printf(“ 4.通訊者的刪除n”);printf(“ 5.通訊錄的存儲n”);printf(“ 6.通訊者的排序n”);printf(“ 0.退出通訊錄管理系統(tǒng)n”);printf(“ ======================n”);printf(“ 請選擇操作0-5 nn”);for(;;){ scanf(“%d”,&i);if(i<0||i>6)printf(“t對不起,您的輸入錯誤n”);else break;} return i;} intcreate_record(){inti,j;for(i=0;;) { printf(“ 學號(12)姓名(10)出生年月(10)家庭住址(30)郵編(10)電話(15)n”);printf(“-------------n”);scanf(“%s%s%s%s%s%s”,data[i].num,data[i].name,data[i].birthday, data[i].post, data[i].phone);i++;printf(“ 想繼續(xù)創(chuàng)建嗎?(1.是/0.不):”);scanf(“%d”,&j);if(!j) return i;else printf(“恭喜你,創(chuàng)建成功!請繼續(xù)創(chuàng)建!n”); } return i;} intadd_record(int flag){ int i=flag,j;for(i;;) { printf(“ 學號(12)姓名(10)出生年月(10)家庭住址(30)郵編(10)電話(15)n”);printf(“-------------n”); scanf(“%s%s%s%s%s%s”,data[i].num,data[i].name,data[i].birthday,data[i].post, data[i].phone);i++;printf(“ 想繼續(xù)添加嗎?(1.是/0.不):”);scanf(“%d”,&j);if(!j)return i;else printf(“恭喜你,添加成功!請繼續(xù)添加!n”); } return(i);} intfind_record(){ int i;char number[6];char named[10];intxz;printf(“--------------------n”);printf(“ 1.按學號查詢n”);printf(“ 2.按姓名查詢n”);printf(“--------------------n”);printf(“ 請選擇 : n”); scanf(“%d”,&xz);if(xz==1){ printf(“ 請輸入要查找的學號: ”);scanf(“%s”,number);for(i=0;i if(strcmp(data[i].num,number)==0) { printf(“ ** 學號姓名出生年月家庭住址郵編電話**n”);printf(“------------------------------n”);printf(“%s,%s,%s,%s,%s,%sn”,data[i].num,data[i].name,data[i].birthday,data[i].post,data[i].phone);printf(“------------------------------n”);return 0;} } else if(xz=2){ printf(“請輸入要查找的姓名: ”);scanf(“%s”,named);for(i=0;i { printf(“ ** 學號姓名出生年月家庭住址郵編電話**n”);printf(“------------------------------n”);printf(“%s,%s,%s,%s,%s,%sn”,data[i].num,data[i].name,data[i].birthday,data[i].post,data[i].phone);printf(“------------------------------n”);return 0;else {printf(“對不起,沒有你要找的人!n”);return 0;} } else {printf(“對不起,沒有你要找的人!n”);return 0;} } } intdelete_record(int flag) { inti,j;intdeletemark=0;char number[20];printf(“ttt請輸入要刪除學號:n”);scanf(“%s”,number);for(i=0;i { if(strcmp(data[i].num, number)==0) { printf(“ttt以下是您要刪除的用戶紀錄:n”);printf(“ ** 學號姓名出生年月家庭住址郵編電話**n”);printf(“------------------------------n”); printf(“%s,%s,%s,%s,%s,%sn”,data[i].num,data[i].name,data[i].birthday,data[i].post,data[i].phone);printf(“------------------------------n”); printf(“ttt是否刪除?(y/n)”);if(getch()=='y' || getch()=='Y') { for(j=i;j } else return; } continue; } if(deletemark==0) { printf(“ttt沒有該用戶的紀錄”); return; } return; } voidpaixu_record(int flag){inti,j;struct record tmp; printf(“ 1.按姓名排序n”);printf(“ 2.按學號排序n”);scanf(“%d”,&i);if(i==1){for(i=1;i { if(strcmp(data[i].name, data [i-1].name)<0) { tmp= data[i]; j=i-1;do { data [j+1]= data [j];j--;}while((strcmp(tmp.name, data [j].name)<0&&j>=0));data [j+1]=tmp; } } printf(“ttt排序成功!”);} if(i==2){for(j=0;j {tmp=data[i];data[i]=data[i+1];data[i+1]=tmp;} } } intsave_record(int flag){ FILE*fp;int i;if((fp=fopen(“D:data.txt”,“w+”))==NULL) {printf(“無法打開文件!”);exit(0);} for(i=0;i {fprintf(fp,“%s,%s,%s,%s,%s,%sn”,data[i].num,data[i].name,data[i].birthday, data[i].post, data[i].phone);printf(“n”);} fclose(fp);return 0;} C語言課程設計報告——劉顯安 C語言課程設計 姓名:劉顯安 學號:09041131 班級:090411 專業(yè):計算機科學與技術 學院:信息工程學院 設計題目:學生通訊錄管理系統(tǒng) 指導教師:宋文琳 提交時間:2010年9月4日 第1頁(共25頁) C語言課程設計報告——劉顯安 課程題目:學生通訊錄管理系統(tǒng) 要求:學生通訊錄信息包括:學號、姓名、班機、聯(lián)系電話、E-mail、宿舍等 主要功能:1、2、3、4、5、通訊錄信息錄入功能 通訊錄信息刪除功能 通訊錄信息瀏覽功能 通訊錄信息查詢功能 按學號排序功能 一、總體設計 首先,整個系統(tǒng)必須有一個主函數(shù),為了盡量提高程序的易修改性,且不至于相互干擾,將每一個功能分成不同的模塊,用不同的函數(shù)來實現(xiàn),例如在我寫的這個程序中,一共用了11個函數(shù),分別是: 主菜單函數(shù)menu()、關于函數(shù)gaunyu()、幫助函數(shù)help()、輸出單個學生信息函數(shù)shuchu()、輸入函數(shù)shuru()、輸出所有學生信息函數(shù)findall()、按姓名查找函數(shù)findname()、按學號查找函數(shù)findnum()、刪除函數(shù)shanchu()、排序函數(shù)paixu()、主函數(shù)main(),這樣在整個程序的設計過程中也就一目了然,寫起來也相對輕松了不少。 這個程序我只是總體上參考了一下網(wǎng)上程序的架構,具體的各個函數(shù)是參照課本上《鏈表》那一章的內(nèi)容的,比如結構體的建立、查找和排序等功能,這些書上都有類似的,其中排序功能雖沒有原版的,第2頁(共25頁) C語言課程設計報告——劉顯安 但是在第六章中有一個用冒泡法排序的例題,我就是仿照這個模式來對結構體進行排序的,總之整個程序中蘊含了我很多的汗水。 二、具體設計 關于這個程序的具體設計,也不是一兩句話就能說完的,所以我也不想再在這里贅述了,因為程序里都可以看的到,幾乎每個函數(shù)都傾注了我的大量汗水,我在這上面花了不少的時間,不過從中也收獲了很多,因為不停地修改不停的調(diào)試,總之還是直接看源程序吧,因為也沒必要在這里重復地說廢話。 三、源代碼 以下是整個程序的源代碼,其中我的主菜單函數(shù)是很美觀的,但由于這里字體和板式的限制,不能很好的顯現(xiàn),可以看我下面程序運行的截圖就知道了?!?#include struct student{ 第3頁(共25頁) C語言課程設計報告——劉顯安 long num;char name[20];int banji;char tel[11];char Email[20];int sushe;struct student *next;}; struct student *stu;int n; void menu(void){ /*主菜單函數(shù)*/ system(“cls”);puts(“****************************************************************************”);puts(“** ^_^學生通訊錄管理系統(tǒng)^_^ **”);puts(“****************************************************************************”);puts(“******** 計 ********”); 第4頁(共25頁) C語言課程設計報告——劉顯安 puts(“******* *******”);puts(“****** 算 ******”);puts(“***** 0 1=錄入學生通訊錄信息 *****”);puts(“**** 9 機 ****”);puts(“*** ***”);puts(“** 科 **”);puts(“* *”);puts(“** 1 學 **”);puts(“*** ***”);puts(“**** 與 ****”);puts(“***** *****”);0 4 劉 2= 顯 安 6= 第5頁(共25頁) 列出所有學生通訊錄 3=按姓名查詢信息 4=按學號查詢信息 5=刪除學生信息 按學號將通訊錄排序 7=關于 8=幫助 0=退出 C語言課程設計報告——劉顯安 puts(“****** 技 ******”);puts(“******* *******”);puts(“******** 術 ********”);puts(“****************************************************************************”);} void guanyu()/*關于函數(shù)*/ { system(“cls”);puts(“n ************************** ”);puts(“ *** 版權所有,翻版必究!***”);puts(“**** copyright◎劉顯安!****”);puts(“ *** 2009~2010 ***”);puts(“ **************************”);puts(“n返回主菜單請按【9】”);if(getche()=='9')menu();} struct student *shuru(void)/*輸入函數(shù)*/ 第6頁(共25頁) C語言課程設計報告——劉顯安 { system(“cls”);struct student *s1,*s2;n=1;int num;puts(“請輸入學生個數(shù)(提示:個數(shù)不能輸入0?。骸?;scanf(“%d”,&num);s1=s2=(struct student *)malloc(sizeof(struct student));puts(“*************************************************”);puts(“請輸入學號:”);scanf(“%ld”,&s1->num);puts(“請輸入學生姓名:”);scanf(“%s”,s1->name);puts(“請輸入班級:”);scanf(“%d”,&s1->banji);puts(“請輸入電話號碼:”);scanf(“%s”,s1->tel);puts(“請輸入電子郵件:”);scanf(“%s”,s1->Email);puts(“請輸入學生宿舍號:”);scanf(“%d”,&s1->sushe);stu=s1; 第7頁(共25頁) C語言課程設計報告——劉顯安 while(n 第8頁(共25頁) C語言課程設計報告——劉顯安 s2=s1;s2->next=NULL;return(stu);//system(“cls”);} void shuchu(struct student *s){ /*輸出單個學生信息*/ printf(“* %-8ld”,s->num);printf(“%-15s”,s->name);printf(“%-8d”,s->banji);printf(“%-15s”,s->tel);printf(“%-15s”,s->Email);printf(“%-5d *n”,s->sushe);} void findall()/*輸出所有學生信息*/ { system(“cls”);struct student *s;//if(n=2)//printf(“n現(xiàn)在有%d個學生信息,分別是:n”,n);//else 第9頁(共25頁) C語言課程設計報告——劉顯安 printf(“n現(xiàn)在有%d個學生信息,分別是:n”,n);puts(“________________________________________________________________________”);puts(“* 學號 姓名 班級 電話 電子郵件 宿舍 *”);s=stu;while(s!=NULL){ shuchu(s);s=s->next;} puts(“________________________________________________________________________”);puts(“返回主菜單請按【9】”);if(getche()=='9')menu();} void findname(){ /*按姓名查找函數(shù)*/ system(“cls”);struct student *s;char name[20];printf(“n請輸入你要查詢的學生姓名:n”); 第10頁(共25頁) C語言課程設計報告——劉顯安 scanf(“%s”,name);s=stu;while(strcmp(s->name,name)!=0){ s=s->next;} if(s==NULL){ puts(“查無此學生姓名!”);goto end;} else { puts(“該學生的信息為:”);puts(“* 學號 姓名 電子郵件 宿舍 *”);shuchu(s);} end:;puts(“返回主菜單請按【9】”);if(getche()=='9')menu();} 第11頁(共25頁) 班級 電話 C語言課程設計報告——劉顯安 void findnum()/*按學號查找函數(shù)*/ { system(“cls”);struct student *s;puts(“請輸入你要查詢的學生學號:”);long i;scanf(“%ld”,&i);s=stu; while(s->num!=i){ s=s->next;} if(s==NULL){puts(“查無此學生學號!”);goto end;} else { puts(“該學生的信息為:”);puts(“* 學號 姓名 班級 郵件 宿舍 *”);shuchu(s); 第12頁(共25頁) 子電話 電C語言課程設計報告——劉顯安 } end:;puts(“返回主菜單請按【9】”);if(getche()=='9')menu();} struct student *shanchu(struct student*stu)/*刪除函數(shù)*/ { system(“cls”);long num;char s;struct student *s1,*s2;if(stu==NULL){ puts(“傻冒!沒有任何學生信息,還刪個屁啊,刪刪刪!”);goto end;} puts(“請輸入你要刪除的學生學號:”);scanf(“%ld”,&num);s1=stu;puts(“警告:你確定要刪除這個學生的信息嗎(Y/N)?”);scanf(“%s”,&s); 第13頁(共25頁) C語言課程設計報告——劉顯安 if((s=='Y')||(s=='y')){ while((num!=s1->num)&&(s1->next!=NULL)){s2=s1;s1=s1->next;} if(num==s1->num){ puts(“該學生的信息為:”);puts(“* 學號 姓名 班級 電話 電子郵件 宿舍 *”);shuchu(s1);if(s1==stu)stu=s1->next;else s2->next=s1->next;puts(“注意喲,該學生的信息已經(jīng)刪除了!剩下的學生通訊錄信息如下:”);n=n-1;} } findall();return(stu);end:; 第14頁(共25頁) C語言課程設計報告——劉顯安 puts(“返回主菜單請按【9】”);if(getche()=='9')menu();} void paixu(){ /*排序函數(shù)*/ struct student *p, *p1,*p2;int i,j;int temp;char b[20];if(stu==NULL){printf(“n學生信息不存在n”);goto end;} for(i=0;i {temp=p1->num;p1->num=p2->num;p2->num=temp; strcpy(b,p1->name);strcpy(p1->name,p2->name);strcpy(p2->nam 第15頁(共25頁) C語言課程設計報告——劉顯安 e,b); temp=p1->banji;p1->banji=p2->banji;p2->banji=temp; strcpy(b,p1->tel);strcpy(p1->tel,p2->tel);strcpy(p2->tel,b); strcpy(b,p1->Email);strcpy(p1->Email,p2->Email);strcpy(p2->Email,b);temp=p1->sushe;p1->sushe=p2->sushe;p2->sushe=temp; } p1=p1->next;} } p=stu;puts(“已按學生學號順序排序完畢!重新排序如下:”); puts(“****************************************************************************”);puts(“* 學號 姓名 班級 電話 電子郵件 宿舍 *”); while(p!=NULL) 第16頁(共25頁) C語言課程設計報告——劉顯安 { printf(“* %-8ld”,p->num);printf(“%-15s”,p->name);printf(“%-8d”,p->banji);printf(“%-15s”,p->tel);printf(“%-15s”,p->Email);printf(“%-5d *n”,p->sushe);p=p->next;} end:;puts(“返回主菜單請按【9】”);if(getche()=='9')menu();} void help()/*幫助函數(shù)*/ { system(“cls”);puts(“n1、請按提示操作,第一次進入本系統(tǒng)時請按“1”錄入學生信息,”);puts(“ 否則有可能造成程序運行錯誤!”);puts(“ 2、添加、修改功能本系統(tǒng)暫不提供,還有待以后完善,謝謝 第17頁(共25頁) C語言課程設計報告——劉顯安 合作!”);puts(“ 3、請注意查看“Num Lock”是否打開,如果沒有打開,則按數(shù)字n 鍵可能導致程序錯誤!”);puts(“ 4、版權所有,翻版必究!請按“7”鍵查看關于。”);puts(“n返回主菜單請按【9】”);if(getche()=='9')menu();} void main()/*主函數(shù)*/ { char a;menu();puts(“n您為首次使用本系統(tǒng),強烈建議您按1開始錄入學生信息,”);puts(“否則有可能導致程序運行錯誤!您可以按8查看幫助.”);a=getche();while(a){ puts(“");switch(a){case'0':goto end;break;case '1': puts(”n好了,您可以開始向本系統(tǒng)錄入學生通訊錄信息了: 第18頁(共25頁) C語言課程設計報告——劉顯安 “);stu=shuru();system(”cls“);menu();puts(”n學生信息錄入完畢,請輸入你的選擇(0~6):n“); break;case '2':findall();puts(”n請輸入你的選擇(0~6):“);break;case '3':findname();puts(”n請輸入你的選擇(0~6):“);break;case '4':findnum();puts(”n請輸入你的選擇(0~6):“);break;case '5':stu=shanchu(stu);puts(”n請輸入你的選擇(0~6):“);break;case '6':paixu();puts(”n請輸入你的選擇(0~6):“);break;case '7':guanyu();puts(”n請輸入你的選擇(0~6):“);break;case '8':help();puts(”n請輸入你的選擇(0~6):“);break;default:puts(”輸錯了!笨蛋!快點按數(shù)字1鍵錄入學生信息吧!“);break;} a=getche();} end:;puts(”謝謝您使用本系統(tǒng),歡迎再次使用!"); 第19頁(共25頁) C語言課程設計報告——劉顯安 } ————————————————————————— 四、調(diào)試 主要是通過截圖來顯示運行過程 以下是程序運行的主界面: 按1后,開始錄入信息,程序會提示你輸入學生個數(shù)(例如本例中輸入4個),當輸完4個學生的信息時,程序會提示你已輸入完畢: 第20頁(共25頁) C語言課程設計報告——劉顯安 學生信息錄入完畢,提示輸入(0到6)進行選擇: 第21頁(共25頁) C語言課程設計報告——劉顯安 這時我選擇按2輸出所有學生信息,按9返回: 按3按姓名查詢信息: 按4按學號查詢信息: 第22頁(共25頁) C語言課程設計報告——劉顯安 按5刪除學生信息,這是按學號刪除學生信息,本例中,刪除學號為41212的學生信息: 刪除成功后,系統(tǒng)自動將剩下的學生信息列出: 按6按學號從小到大進行排序,可以發(fā)現(xiàn),排序成功: 第23頁(共25頁) C語言課程設計報告——劉顯安 按8查看幫助函數(shù): 呵呵,這是我設置的關于函數(shù),滿足一下敝人的虛榮心嘛^_^,版權所有,翻版必究哦! 最后按0退出系統(tǒng): 第24頁(共25頁) C語言課程設計報告——劉顯安 呵呵,怎么樣?我寫的程序還行吧。嘿嘿…… 三、總結 這個程序我只是總體上參考了一下網(wǎng)上程序的架構,具體的各個函數(shù)是參照課本上《鏈表》那一章的內(nèi)容的,比如結構體的建立、查找和排序等功能,這些書上都有類似的,其中排序功能雖沒有原版的,但是在第六章中有一個用冒泡法排序的例題,我就是仿照這個模式來對結構體進行排序的,總之整個程序中蘊含了我很多的汗水。 第25頁(共25頁)第二篇:學生通訊錄管理系統(tǒng)
第三篇:C語言程序設計學生通訊錄管理系統(tǒng)
第四篇:C語言-通訊錄管理系統(tǒng)
第五篇:學生通訊錄管理系統(tǒng)(C語言課程設計實驗報告)