C语言程序设计报告完整可编辑版Word文件下载.docx

上传人:b****4 文档编号:18391238 上传时间:2022-12-16 格式:DOCX 页数:14 大小:73.77KB
下载 相关 举报
C语言程序设计报告完整可编辑版Word文件下载.docx_第1页
第1页 / 共14页
C语言程序设计报告完整可编辑版Word文件下载.docx_第2页
第2页 / 共14页
C语言程序设计报告完整可编辑版Word文件下载.docx_第3页
第3页 / 共14页
C语言程序设计报告完整可编辑版Word文件下载.docx_第4页
第4页 / 共14页
C语言程序设计报告完整可编辑版Word文件下载.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

C语言程序设计报告完整可编辑版Word文件下载.docx

《C语言程序设计报告完整可编辑版Word文件下载.docx》由会员分享,可在线阅读,更多相关《C语言程序设计报告完整可编辑版Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。

C语言程序设计报告完整可编辑版Word文件下载.docx

longtelephone;

//电话号码

charadress[40];

//地址

charE_mail[30];

//邮箱

intQQ[12];

//增设的QQ一栏

structstudent*next;

//用于存放下一级指针

}first;

first为第一个节点,继而在其后动态的开创若干节点。

以下是用于链表处理的各个函数:

structstudent*creat(structstudent*p)//输入函数

voidprintall(structstudent*head)//显示所有记录

structstudent*delet(structstudent*head)//删除函数

structstudent*insert(structstudent*head)//插入函数

structstudent*searchbynum(structstudent*head)//按学号查找

structstudent*searchbyname(structstudent*head)//按姓名查找

structstudent*search(structstudent*head)//查找函数

menu_select()//选择函数

以下是各个函数的详细说明:

Creat()函数用于创建链表,其中以n记录节点的个数,并在创建时实现自加,以便于后面函数的处理,其循环输入的实现,依靠库函数malloc()和后面的while循环。

Printall函数用于显示当前的的所有记录,依靠头指针找到链表首地址,有while循环实现所有记录的输出。

Delet()函数用于删除某个记录,删除可以按姓名或学号这两种方式进行的,但本程序中没有这个功能即只可以按学号进行删除(因为学号唯一)。

Insert()函数用于插入,同样以头指针找到链表的首地址,并将要插入的学号依次与各个节点中得num比较,然后按顺序将一个节点插入。

Search()函数用于查找,查找函数提供了两种方式,即按姓名查找和按学号查找。

在search()函数中可以按提示调用searchbyname()和searchbynum()。

Menu_select()函数用于提供函数选项,旨在简化主函数。

流程图

 

此即为该程序的主流程图。

源程序

以下是详细的源程序及部分注释:

#include<

stdio.h>

string.h>

malloc.h>

conio.h>

stdlib.h>

#defineNULL0

#defineLENsizeof(structstudent)

#defineSHU"

%d\n%s\n%5d\n%ld\n%s\n%s\n%s"

intn;

structstudent*creat(structstudent*p)//创建链表的函数,即输入函数

structstudent*head;

structstudent*p1,*p2;

n=0;

//先给n赋值0

p1=p2=(structstudent*)malloc(LEN);

//强制类型转换

printf("

\t\t\t****************请输入用户信息****************\n"

);

\t\t\t输入学号:

\n"

scanf("

%ld"

&

p1->

num);

\t\t\t输入姓名:

%s"

name);

\t\t\t输入年龄:

%d"

age);

\t\t\t输入电话:

telephone);

\t\t\t输入地址\n"

adress);

\t\t\t输入E-mail:

E_mail);

\t\t\t输入QQ\n"

QQ);

//40

head=NULL;

while(p1->

num!

=0)

{

n=n+1;

//实现n的自加,记录节点的个数

if(n==1)

head=p1;

else

p2->

next=p1;

p2=p1;

p1=(structstudent*)malloc(LEN);

printf("

scanf("

p1->

}

p2->

next=NULL;

return0;

}

structstudent*p;

\n全部的记录如下\n:

"

p=head;

do

printf(SHU,p->

num,p->

name,p->

age,p->

telephone,p->

adress,p->

E_mail,p->

p=p->

next;

}while(p!

=NULL);

}//80

structstudent*delet(structstudent*head)//删除函数

请输入要删除的号码:

if(head==NULL)

{

列表为空!

n"

returnhead;

p1=head;

while(num!

=p1->

num&

&

next!

=NULL)

p1->

if(num==p1->

num)

if(p1==head)//要删除的节点为首节点

head=p1->

next=p1->

delet:

%d\n"

num);

n=n-1;

//节点减一

else

%d未找到该节点!

structstudent*insert(structstudent*head)//插入函数

structstudent*stud;

structstudent*p0,*p1,*p2;

p0=stud;

//p0指向的是要插入的节点

if(head==0)

head=p0;

p0->

//120

while((p0->

num>

num)&

(p1->

=NULL))

{

p2=p1;

p1=p1->

}

if(p0->

num<

if(head==p1)

head=p0;

//插入到原来第一个节点之前

else

p2->

next=p0;

p0->

//插入到p2所指的节点之后

n=n+1;

returnhead;

structstudent*searchbynum(structstudent*head)//按学号查找

longnumb;

numb);

//147

if(numb!

=p->

structstudent*searchbyname(structstudent*head)//按姓名查找

chara[100];

请输入要查找的姓名:

a);

if(strcmp(a,p->

name)!

structstudent*search(structstudent*head)

charchoic;

\t\t\t1-按电话号码查找2-按姓名查找"

\t\t\t请选择:

choic=getch();

switch(choic)

case'

1'

:

searchbynum(&

first);

break;

2'

searchbyname(&

intmenu_select()

chars[80];

inta;

//定义整形变量

system("

cls"

\t\t***********欢迎进入通讯管理界面********\n\n"

\t\t\t0.输入记录\n"

\t\t\t1.显示记录\n"

\t\t\t2.查找\n"

\t\t\t3.插入记录\n"

\t\t\t4.删除记录\n"

\t\t\t5.Quit\n"

\t\t***********************************************\n\n"

do{

printf("

Enteryouchoice(0~5):

s);

a=atoi(s);

while(a<

0||a>

5);

returna;

main()

\t\t************************************************\n"

\t\t********welcometoTONGXUNLU*******************\n"

\t\t###########codeby陈国警###################\n"

\t\t*************************************************\n"

按任意键进入主菜单\n"

getch();

intselectnum;

//选择函数,提示选择各种链表处理函数。

while

(1)

selectnum=menu_select();

switch(selectnum)

case0:

{

creat(&

break;

}

case1:

printall(&

break;

case2:

search(&

case3:

insert(&

case4:

delet(&

case5:

printf("

BYEBYE!

system("

pause"

//系统暂停

getchar();

exit(0);

getchar();

以下是部分运行结果:

初始化的界面

选择界面:

创建链表中的输入界面:

查找中的提示界面:

限于篇幅,运行结果就只列举这么多。

上机总结

这是自从学习C语言以来我编写过的最大的一个程序,编写的时候遇到了前所未有的困难。

因为这个程序所涉及到的知识,全部是要靠自学掌握的。

期间我问过很多人,都说这个没有可能做出来,我也一度想放弃,而且在假期也没有时间没有条件来编写这个程序。

后来还是勉强做了,这也是这个程序中有很多不足之处的原因。

比如这个程序未能做到将文件保存到磁盘中,这是最明显的一个缺点。

然后其中还有一些可以简化的地方,也有一些可以让界面更加友好的地方(如上面提到的删除可以按姓名和学号两种不同的方式)。

总之可以改进的地方很多。

但这个程序可以说是自己一点一点设计而来,还是能让人感到一点成就感的。

另外一点就是以后虽然不再学习C语言,但自己在下面也应该勤于练习,不能把这门技能给丢了,我们应该为我们的以后着想。

【本文档内容可以自由复制内容或自由编辑修改内容期待你的好评和关注,我们将会做得更好】

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1