文档库 最新最全的文档下载
当前位置:文档库 › C语言课程设计报告(报告+代码=班级通讯录系统)

C语言课程设计报告(报告+代码=班级通讯录系统)

河南理工大学

计算机科学与技术学院课程设计报告

课程名称:高级语言程序设计设计题目:班级通讯录

学生姓名:杨传华

学号:311009030227

专业班级:信管1002 班

指导教师:于金霞

2010 年09月10 日

一、设计题目及要求

设计题目:班级通讯录

对象:信管10级

(一)、技术参数和设计要求:

1.该系统主要处理通讯录的相关信息。

2.通讯录信息主要包括:姓名、班级、手机、家庭电话、电子邮件、通讯录地址、

邮编等内容。

3.完成以下的操作:实现通讯录信息的添加、修改、删除和查询。

(二)、设计内容与步骤

1.分析并建立满足上述要求的数据结构

2.算法设计与分析

3.程序设计、实现、调试

4.课程设计说明书

二、算法设计分析

因为一个班级里面有很多学生,而且每个学生又包含很多信息如姓名、学号、电话、邮箱等,这些信息又分别属于不同的数据类型,但是每个学生所包含的数据信息成分相同,所以要用到构造数据类型:结构体。用到结构体,应为要能实现查找、修改、删除等,所以又要用到链表的知识!要实现这些功能,要用到模块化设计思想,用函数来解决问题!

三、具体函数分析

(一)、插入新结点

在插入新结点之前,先创建一个只有指针域的头结点,又指针p 扫描全链表,实现尾插法,并返回头指针。

(二)、删除结点

用连个指针p,q扫描全链表,先通过学号找到要删除的结点q,然后将q结点从链表中删除,然后释放此结点!

(三)、修改结点内容

通过学号找到此学生,通过switch 语句选择要修改的项目,然后进行修改。(四)、查找并输出

通过学号找到此学生,然后分别访问并输出此结点各项内容

(五)、输出通讯录

顺序访问链表各个结点,并输出结点信息。

(六)、保存为文件

现在d盘里面创建一个读写类型文件“班级通讯录.txt”,然后通过文件类型指针fp访问此文件并写入通讯录信息。

(七)、释放结点并结束程序

从头结点开始,使头结点不断后移,并将前面的结点释放。

四、算法流程图

g 4 c X 土品/Pt

五、函数运行情况及部分代码

一)、主函数框架

主函数要用到基本输入输出、 switch 语句转换操作命令,然后用 循环操作。具体如下:

int main()

int cz;// 操作符 struct stu *head,*q; head=(struct stu*)malloc(sizeof(struct stu));

head->next=NULL;

system("color 2e");// 修改 dos 窗口前背景色 , 用两个十六进制数表示

start :printf(" 输入操作符 1-7:");

scanf("%d",&cz); switch(cz)

{

case 1:

q=(struct stu *)malloc(sizeof(struct stu)); printf("\t 输入姓

名 :");scanf("%s",q->name); printf("\t 输入学号 :");scanf("%d",&q->xh); printf("\t 输入班级 :");scanf("%d",&q->grade); printf("\t 手机

号 :");scanf("%s",q->cel); printf("\t 家庭电话 :");scanf("%s",q->tel); printf("\t 输入电子邮件 :");scanf("%s",q->mail); printf("\t 通讯录地

址 :");scanf("%s",&q->add); printf("\t 输入邮编 :");scanf("%s",&q->post);

printf(" *************** 班级通讯录*****************、n\n\n")?

printf(" * 1:新建通讯录 *\n"); printf(" * 2:删除通讯录 *\n"); printf(" * 3:修改通讯录 *\n"); printf(" * 4:查询通讯录 *\n");

printf(" * 5:显示全部记录

*\n");

printf(" *

6:保存为文件

*\n"); printf(" * ■7 ?禅访納丰 士由*\n");

7:释放链表并结束程序

printf("

*********************************************************\n");

printf("\n ********************************C **********************************

语言课

goto 语句实现 程设计

charu(head,q);

printf("插入成功!!!\n");break;

case 2://删除

head=del(head); break;

case 3:

cha nge(head);break;

case 4:

search(head);break;

case 5:

prin tall(head);

break;

case 6:

prin tf("\n");

baoc(head); break;

case 7:

sf(head);

exit (0);

default: printf("输入操作错误,重新");

}

goto start;

return 0;

其中用到输出*来美化系统运行页面,然后用system("color 2e");语句来修改dos 界面前背景颜色,如;

(二)、插入函数

struct stu *charu(struct stu *head,struct stu *q)〃 插入新结点 {

struct stu *p;

for(p=head;p->n ext!=NULL;p=p->n ext); p_>n ext=q; q-> next=NULL; retur n head; }

通 讯 录 为

^空!!!*********************************\n\n\n")"

else {

printf("\t 输入要删除学生学号:"); scan f("%d", &a);

for(p=head,q=p->n ext;q->xh!=a&&q->n ext!=NULL;)

运行界面如图:

本部分采用尾插法。

(三)删除结点

代码如下:

struct stu *del(struct stu *head)〃 删除结点

struct stu *p,*q;

int a;//要删除学生的学号 if(head-> next==NULL)

printf(

p=p->n ext;

q=p->n ext;

}

if(q_>xh==a)

{

p_>n ext=q _>n ext;

free(q);

printf(” 删除成功!!!\n");

}

else printf("no people have foun d!!!");

}

retur n head;

运行界面通讯录为

不为空时:

(四)查找

输入要查找学生学号,找到后将其输出,如图:

(五)修改学生信息

先通过学号找到该学生,然后用switch语句选择修改项,再用switch和goto语句实现是否循环,运行如图:

(六) 、保存文件

在D:盘中创建一个读写文件,顺序将各节点信息保存进去,代码为: struct stu *baoc(struct stu *head)〃 保存文件 {

FILE *fp;

struct stu *p=head; if(head-> next==NULL)

********************************** ^空!!!*********************************、n\n\n")" else {

班级通讯录.txt","w"))==NULL)

{

prin tf("ca n't open file!!!\n"); exit(0); }

while(p-> next!=NULL) {

fwrite(p->n ext,sizeof(struct stu),1,fp); p=p->n ext; } fclose(fp);

printf("保存文件成功!!!\n\n");

f

l

改改畫话幷编

邮 写

--s

s S 5

S

:^匚 1234

5678

■I

2

1

1 s

1

输熾

printf (”

}

retur n head;

}

(七)释放结点退出系统

用指针p扫描链表,头指针逐步后移,释放结点p,代码如下: void sf(struct stu *head)

{

struct stu *p=head ;

printf("释放链表:\n”);

while(p!=NULL)

{

head=head->n ext;

free(p);

p=head;

}

printf("释放链表成功!!!\n");

}

运行如图;

六、附录:完整原代码

#in clude

#in clude

#in clude

#include struct stu

{

char name[100];// 姓名int xh;// 学号int grade;// 年级char cel[15];// 手机char tel[50];// 电话char mail[50];// 邮件char add[100];// 地址char post[15];// 邮编struct stu *next;

};

struct stu *charu(struct stu *head,struct stu *q)// 插入新结点

{ struct stu *p; for(p=head;p->next!=NULL;p=p->next); p->next=q;

q->next=NULL; return head;

}

void search(struct stu *head)// 查找结点并输出{

struct stu *p;

int a;// 要查找学生的学号

if(head->next==NULL)

printf( "**********************************

*********************************\n\n\n");

else

{

printf("\t 输入要查询学生学号:"); scanf("%d",&a);

for(p=head->next;p->next!=NULL;p=p->next)

{

if(p->xh==a)

{

printf(" 要查找的学生信息为:\n"); printf(" ★姓名:

");puts(p->name);

printf("\t 学号: ");printf("%d",p->xh); printf("\t 年级:

");printf("%d\n",p->grade); printf("\t 手机:

");puts(p->cel);

printf("\t 电话:");puts(p->tel); 讯录为

空!!!

printf("\t 邮箱: ");puts(p->mail); printf("\t 地址 ");puts(p->add); printf("\t 邮编: ");puts(p->post);

printf("\t 查找成功 !!!"): printf("\n\n\n"); break;

}

}

if(p->xh==a)

{

printf(" 要查找的学生信息为 :\n"); printf("

★姓名: ");puts(p->name);

printf("\t 年级: ");printf("%d\n",p->grade); printf("\t 手机: ");puts(p->cel); printf("\t 电话: ");puts(p->tel); printf("\t 邮箱: ");puts(p->mail);

printf("\t 地址 ");puts(p->add); printf("\t 邮编: ");puts(p->post); printf("\t 查找成功 !!!"): printf("\n\n\n");

}

else printf("no people have found!!!\n");

}

}

struct stu *del(struct stu *head)// 删除结点

{

struct stu *p,*q; int a;// 要删除学生的学号 if(head->next==NULL)

else

{

printf("\t 输入要删除学生学号 :"); scanf("%d",&a);

for(p=head,q=p->next;q->xh!=a&&q->next!=NULL;) { p=p->next; q=p->next;

} if(q->xh==a)

{

空!!! printf(

讯录为

******************************* **\n\n\n" );

p->next=q->next; free(q);

printf(" 删除成功 !!!\n");

}

else printf("no people have found!!!");

}

return head;

}

struct stu *change(struct stu *head)//

修改结点内容

{

int b,a,c; struct stu *p;

if(head->next==NULL)

else

{

printf (" 输入要修改学生学号 :"); scanf("%d",&a);

for(p=head->next;p!=NULL;p=p->next)

if(p->next->xh==a)

printf("\t\t\t 1: 修改姓名 \n"); printf("\t\t\t 2: 修改学号 \n"); printf("\t\t\t 3: 修改年级 \n"); printf("\t\t\t 4: 手机 \n"); printf("\t\t\t 5: 电话 \n"); printf("\t\t\t 6: 邮件 \n"); printf("\t\t\t 7: 地址 \n"); printf("\t\t\t

8: 邮编 \n");

printf(" 请输入你的选择: "); scanf("%d",&b); switch(b)

case 1:

printf("\t 输入新姓名 :");

scanf("%s",p->name);break; case 2:printf("\t 输入新学号 :");

scanf("%d",&p->xh);break; case 3:

空!!! printf( H********************************** 讯录为

******************************* **\n\n\n" );

start: printf("

输入想要修改什么 ?\n");

printf("\t 输入新的班级:");

scanf("%d",&p->grade);break; case 4: printf("\t 输入新的手机号:"); scanf("%s",p->cel);break; case 5:

printf("\t 输入新的电话号:"); scanf("%s",p->tel);break; case 6:

printf("\t 输入新的邮箱:");

scanf("%s",p->mail);break;

case 7:

printf("\t 输入新的地址:");

scanf("%s",p->add);break;

case 8:

printf("\t 输入新的邮编;");

scanf("%s",p->post);break;

default: printf(" 输入操作错误,请重新输入

}

printf(" 修改成功!!!\n");

printf(" 是否要修改其他项?1:是2:printf("

请输入你的选择:"); scanf("%d",&c);

switch(c)

{

case 1:goto start;

case 2:break;

}

}

}

}

return head;

}

void printall(struct stu *head)// 输出全部通讯录

{

struct stu *p=head->next;

while(1)

{

if(p==NULL)

cri n+f/"**********************************

2空!!!*********************************\n\n\n")?

:"); 否\n");

break;

}

else if(p->next==NULL)

{

printf("

★姓名: ");puts(p->name);

printf("\t 学号: ");printf("%d\n",p->xh); printf("\t 年级: ");printf("%d\n",p->grade); printf("\t 手机: ");puts(p->cel); printf("\t 电话: ");puts(p->tel); printf("\t 邮箱: ");puts(p->mail); printf("\t 地址: ");puts(p->add); printf("\t 邮编: ");puts(p->post); printf(" 输出成功 !!!\n"); printf("\n\n\n"); break;

}

else

{

printf(" ★姓名: ");puts(p->name); printf("\t 学号:

");printf("%d\n",p->xh); printf("\t 年级: ");printf("%d\n",p->grade); printf("\t 手机: ");puts(p->cel); printf("\t 电话: ");puts(p->tel); printf("\t 邮箱:

");puts(p->mail); printf("\t 地址:

");puts(p->add); printf("\t 邮编:

");puts(p->post);

printf("\n"); p=p->next;

continue;

}

printf(" 输出成功 !!!\n");

}

}

struct stu *baoc(struct stu *head)// 保存文件

{

FILE *fp; struct stu *p=head; if(head->next==NULL) else

{

空!!! printf( H********************************** 讯录为

******************************* **\n\n\n" );

班级通讯录 .txt","w"))==NULL)

printf("can't open file!!!\n"); exit(0);

}

while(p->next!=NULL)

fwrite(p->next,sizeof(struct stu),1,fp); p=p->next;

}

fclose(fp);

printf(" 保存文件成功 !!!\n\n");

}

return head;

}

void sf(struct stu *head)

{

struct stu *p=head ; printf(" 释放链表 :\n"); while(p!=NULL)

{ head=head->next; free(p); p=head;

}

printf(" 释放链表成功 !!!\n");

}

int main()

{

int cz;// 操作符

struct stu *head,*q;

head=(struct stu*)malloc(sizeof(struct stu));

head->next=NULL;

system("color 2e");// 修改 dos 窗口前背景色 , 用两个十六进制数表示 printf("\n

********************************C

printf(" * 1:新建通讯录 *\n"); printf(" * 2:删除通讯录 *\n"); printf(" * 3:修改通讯录 *\n"); printf(" * 4:查询通讯录 *\n");

printf(" *

5:显示全部记录

printf(" ***************

语言课程

★班级通讯录★ ***************** n\n\n");

6: 保存为文件 *\n");

7: 释放链表并结束程序 *\n");

*********************************************************\n");

scanf("%d",&cz); switch(cz)

{

case 1:

q=(struct stu *)malloc(sizeof(struct stu)); printf("\t 输入姓名 :");scanf("%s",q->name); printf("\t 输入学号 :");scanf("%d",&q->xh); printf("\t 输入班级 :");scanf("%d",&q->grade); printf("\t 手机号 :");scanf("%s",q->cel); printf("\t 家庭电话 :");scanf("%s",q->tel); printf("\t 输入电子邮件 :");scanf("%s",q->mail); printf("\t 通讯录地址 :");scanf("%s",&q->add); printf("\t 输入邮编 :");scanf("%s",&q->post); charu(head,q); printf(" 插入成功 !!!\n");break;

case 2:// 删除

head=del(head);break; case 3:

change(head);break; case 4:

search(head);break; case 5: printall(head);break;

case 6: printf("\n"); baoc(head);break; case 7: sf(head); exit (0);

default: printf(" 输入操作错误 ,重新 ");

}

goto start; return 0;

printf(" printf(" printf("

start :printf(" 输入操作符 1-7:");

相关文档
相关文档 最新文档