C程序设计报告.docx

上传人:b****4 文档编号:5650253 上传时间:2023-05-08 格式:DOCX 页数:27 大小:332.55KB
下载 相关 举报
C程序设计报告.docx_第1页
第1页 / 共27页
C程序设计报告.docx_第2页
第2页 / 共27页
C程序设计报告.docx_第3页
第3页 / 共27页
C程序设计报告.docx_第4页
第4页 / 共27页
C程序设计报告.docx_第5页
第5页 / 共27页
C程序设计报告.docx_第6页
第6页 / 共27页
C程序设计报告.docx_第7页
第7页 / 共27页
C程序设计报告.docx_第8页
第8页 / 共27页
C程序设计报告.docx_第9页
第9页 / 共27页
C程序设计报告.docx_第10页
第10页 / 共27页
C程序设计报告.docx_第11页
第11页 / 共27页
C程序设计报告.docx_第12页
第12页 / 共27页
C程序设计报告.docx_第13页
第13页 / 共27页
C程序设计报告.docx_第14页
第14页 / 共27页
C程序设计报告.docx_第15页
第15页 / 共27页
C程序设计报告.docx_第16页
第16页 / 共27页
C程序设计报告.docx_第17页
第17页 / 共27页
C程序设计报告.docx_第18页
第18页 / 共27页
C程序设计报告.docx_第19页
第19页 / 共27页
C程序设计报告.docx_第20页
第20页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C程序设计报告.docx

《C程序设计报告.docx》由会员分享,可在线阅读,更多相关《C程序设计报告.docx(27页珍藏版)》请在冰点文库上搜索。

C程序设计报告.docx

C程序设计报告

综合程序设计与实践之二

指导书

 

学生姓名任国俊

学生学号12009095008

专业班级109095A

指导教师

完成时间2011.7.7

三江学院电子系

2011年6月

一、设计内容:

1.建立一个学生信息单链表

2.输出链表中的学生信息

3.在链表中查找某个学生信息

4.在链表中插入一个学生结点信息

5.在链表中删除一个学生结点

6.退出该管理系统

二、设计思想、流程图

1.学生信息管理系统基本的功能包括菜单模块,数据输入模块,数据插入模块,数据查找模块,数据删除模块,数据输出模块等。

 

菜单模块程序运行流程图如下:

 

输入处理:

利用链表技术输入多名学生的数据,直到输入学生的学号为“0”,则结束数据的输入。

插入处理:

利用链表技术插入某学号的学生信息,先找到插入的位置再实现插入。

删除处理:

利用链表技术删除某学号的学生信息,如果找到该学号则进行删除,否则输出“没有找到该学号”的信息。

查找处理:

利用链表技术根据学生学号查找某学号的学生信息。

三、源程序代码

#include

#include

/*谭法建立单链表和输出单链表*/

#include

#include

typedefstructnode

{intnum;

charname[20];

structnode*next;

}STD;

#defineLENsizeof(STD)

intmenu_select();

voidhandle_menu1();

voidgame4();voidgame2();

STD*insert(STD*head,STD*stud);STD*insert2(STD*head,STD*stud);

voidgame3();voidgame5();STD*delete(STD*head,longnum);voidgame1();voidgame6();

STD*search(STD*head,longnum);STD*head1,*head2;

intn=0;

/*追加法建表*/

voidcreat1(void)

{STD*p1,*p2;

system("CLS");

head1=NULL;

p1=(STD*)malloc(LEN);

p2=p1;

printf("建表方法1追加法建表!

\n");

printf("输入学号姓名,若输入学号为0则退出建表!

\n");

scanf("%d%s",&p1->num,p1->name);

while(p1->num!

=0)

{n++;

if(n==1)

head1=p1;

else

p2->next=p1;

p2=p1;

p1=(STD*)malloc(LEN);

scanf("%d%s",&p1->num,p1->name);

}

free(p1);p2->next=NULL;

scanf("%*c");

printf("按回车键继续!

\n");getchar();

system("CLS");

return;}

/*插入法建表*/

voidcreat2(void)

{STD*p1;

head2=NULL;

system("CLS");

p1=(STD*)malloc(LEN);

printf("建表方法2插入法建表!

\n");

printf("输入学号姓名(输入学号以0结束)!

\n");

scanf("%d%s",&p1->num,p1->name);

while(p1->num!

=0)

{p1->next=head2;

head2=p1;

p1=(STD*)malloc(LEN);

scanf("%d%s",&p1->num,p1->name);

}

scanf("%*c");

printf("按回车键继续!

\n");getchar();

system("CLS");free(p1);

return;}

/*链表输出*/

voidprint(STD*head)

{STD*p;

p=head;

while(p!

=NULL)

{printf("学号%3d姓名%s\n",p->num,p->name);p=p->next;}

printf("链表为空!

\n");

scanf("%*c");

printf("按回车键继续!

\n");getchar();

system("CLS");}

/*--------------表1插入结点函数-------*/

voidgame4()

{charch;

STD*stud,*head=head1;system("CLS");

printf("\t仅限在表1中插入!

\n");

printf("\t输入要插入结点的学号和姓名(以空格隔开):

");

stud=(STD*)malloc(LEN);

scanf("%*c");

scanf("%d%s",&stud->num,&stud->name);

if(stud->num<0)

{printf("\t输入的学号不能为负数,请重新选择插入!

\n");

return;}

while(stud->num>=0)

{head1=insert(head,stud);

printf("\t继续插入新结点吗?

(y/n):

");

ch=getchar();

if(ch=='y'||ch=='Y')

{printf("\t输入新结点学号姓名:

(输入n结束插入)");

stud=(STD*)malloc(LEN);scanf("%*c");

scanf("%d%s",&stud->num,&stud->name);

}

elsebreak;}

printf("\t输入回车键返回!

\n");

getchar();

system("CLS");

printf("\n");}

/*--------------表2插入结点函数-------*/

voidgame2()

{charch;

STD*stud,*head=head2;system("CLS");

printf("\t仅限在表2中插入!

\n");

printf("\t输入要插入结点的学号和姓名(以空格隔开):

");

stud=(STD*)malloc(LEN);

scanf("%*c");

scanf("%d%s",&stud->num,&stud->name);

if(stud->num<0)

{printf("\t输入的学号不能为负数,请重新选择插入!

\n");

return;

}

while(stud->num>=0)

{head2=insert2(head,stud);

printf("\t继续插入新结点吗?

(y/n):

");

ch=getchar();

if(ch=='y'||ch=='Y')

{printf("\t输入新结点学号姓名:

(输入n结束插入)");

stud=(STD*)malloc(LEN);

scanf("%*c");

scanf("%d%s",&stud->num,&stud->name);

}

else

break;

}

printf("\t输入回车键返回!

\n");

getchar();

system("CLS");

printf("\n");

/********插入模块********/

STD*insert(STD*head,STD*stud)

{STD*p0,*p1,*p2;

p1=head;

p0=stud;

if(head==NULL)

{head=p0;p0->next=NULL;

}

else

{while((p0->num>p1->num)&&(p1->next!

=NULL))

{p2=p1;p1=p1->next;}

if(p0->num<=p1->num)

{if(head==p1)head=p0;

elsep2->next=p0;

p0->next=p1;}

else

{p1->next=p0;p0->next=NULL;}

}n=n+1;

printf("按回车键继续!

\n");getchar();

system("CLS");

return(head);}

/*插入模块2*/

STD*insert2(STD*head,STD*stud)

{STD*p0,*p1,*p2;

p1=head;

p0=stud;

if(head==NULL)

{head=p0;p0->next=NULL;}

else{while((p0->numnum)&&(p1->next!

=NULL))

{p2=p1;p1=p1->next;}

if(p0->num>=p1->num)

{if(head==p1)head=p0;

elsep2->next=p0;

p0->next=p1;}

else

{p1->next=p0;p0->next=NULL;}

}n=n+1;

printf("按回车键继续!

\n");getchar();

system("CLS");

return(head);}

/*--------------表1删除学生信息-------*/

voidgame3()

{intnum;

charch;

STD*head=head1;

printf("\t仅限在表1中删除!

\n");

printf("\t输入要删除的学号:

");

scanf("%*c");

scanf("%ld",&num);

if(num<0)

{printf("\t输入的学号不能为负数,请重新选择删除!

\n");

return;}

while(num>=0)

{head=head1;

head1=delete(head,num);

printf("\t继续删除吗?

(y/n):

");

scanf("%*c");

ch=getchar();

if(ch=='y'||ch=='Y')

{printf("\t输入要删除的学号:

(输入n结束删除!

)");

scanf("%*c");

scanf("%ld",&num);}

elsebreak;}

printf("\t输入回车键返回!

\n");

getchar();

system("CLS");

printf("\n");}

/*--------------表2删除学生信息-------*/

voidgame5()

{intnum;

charch;

STD*head=head2;

printf("\t仅限在表2中删除!

\n");

printf("\t输入要删除的学号:

");

scanf("%*c");

scanf("%ld",&num);

if(num<0)

{printf("\t输入的学号不能为负数,请重新选择删除!

\n");

return;}

while(num>=0)

{head=head2;

head2=delete(head,num);

printf("\t继续删除吗?

(y/n):

");

scanf("%*c");ch=getchar();

if(ch=='y'||ch=='Y')

{printf("\t输入要删除的学号:

(输入n结束删除!

)");

scanf("%*c");

scanf("%ld",&num);}

else

break;}

printf("\t输入回车键返回!

\n");

getchar();system("CLS");printf("\n");}

/*删除模块*/

STD*delete(STD*head,longnum)

{STD*p1,*p2;

if(head==NULL){printf("\n没有找到该学号!

\n");returnhead;}

p1=head;

while(num!

=p1->num&&p1->next!

=NULL)

{p2=p1;p1=p1->next;}

if(num==p1->num)

{if(p1==head)head=p1->next;

elsep2->next=p1->next;

printf("\n删除:

%ld\n",num);

n=n-1;}

else

printf("\n没有发现此项!

\n",num);

system("CLS");

return(head);}

/*--------------表1查找学生信息-------*/

voidgame1()

{intnum;

charch;

STD*head=head1;

printf("\t仅限在表1中查找!

\n");

printf("\t输入要查找的学号:

");

scanf("%ld",&num);

if(num<0)

{printf("\t输入的学号不能为负数,请重新查找!

\n");

return;}

while(num>=0)

{head=head1;

head1=search(head,num);

printf("\t继续查找吗?

(y/n):

");

scanf("%d",&num);ch=getchar();

if(ch=='y'||ch=='Y')

{printf("\t输入要查找的学号:

(输入n结束查找)");

scanf("%ld",&num);}

elsebreak;}

printf("\t输入回车键返回!

\n");

getchar();system("CLS");

printf("\n");}

/*--------------表2查找学生信息-------*/

voidgame6()

{intnum;

charch;

STD*head=head2;

printf("\t仅限在表2中查找!

\n");

printf("\t输入要查找的学号:

");

scanf("%ld",&num);

if(num<0)

{printf("\t输入的学号不能为负数,请重新查找!

\n");

return;}

while(num>=0)

{head=head2;

head2=search(head,num);

printf("\t继续查找吗?

(y/n):

");

scanf("%d",&num);ch=getchar();

if(ch=='y'||ch=='Y')

{printf("\t输入要查找的学号:

(输入n结束查找)");

scanf("%ld",&num);}

else

break;}

printf("\t输入回车键返回!

\n");

getchar();system("CLS");

printf("\n");}

/*查找模块*/

STD*search(STD*head,longnum)

{STD*p1,*p2;

if(head==NULL){printf("\n没有找到该学号!

\n");returnhead;}

p1=head;

while(num!

=p1->num&&p1->next!

=NULL)

{p2=p1;p1=p1->next;}

if(num==p1->num)

printf("\n%d%s\n",p1->num,p1->name);

else

printf("\n没有发现此项!

\n",num);

return(head);}

/*voidmain()

{printf("***运行结果***\n");

printf("输入学号姓名(输入学号以0结束)!

\n");

creat1();

print(head1);

creat2();

print(head2);}*/

//*select.cpp:

主程序文件*

voidmain()

{handle_menu1();}

//*菜单处理函数*

voidhandle_menu1()

{inth;

for(;;)

{h=menu_select();

switch(h)

{case1:

/*printf("\t进入追加法建表\n");*/

creat1();break;/*调用功能模块*/

case2:

/*printf("\t进入插入法建表\n");*/

creat2();break;

case3:

/*printf("\t输出追加法链表的结果\n");*/

print(head1);break;

case4:

/*printf("\t输出插入法链表的结果\n");*/

print(head2);break;

case5:

/*printf("\t链表1插入\n");*/

game4();break;

case6:

/*printf("\t链表2插入\n");*/

game2();break;

case7:

/*printf("\t链表1删除\n");*/

game3();break;

case8:

/*printf("\t链表2删除\n");*/

game5();break;

case9:

/*printf("\t链表1查找\n");*/

game1();break;

case10:

/*printf("\t链表2查找\n");*/

game6();break;

case11:

printf("\t再见,欢迎再次使用本系统!

谢谢!

\n");

return;

}}}

//*菜单选择函数:

intmenu_select()*

intmenu_select()

{intcn;

for(;;)

{

printf("\欢迎进入学生信息管理系统!

制作人:

任国俊\n");

printf("\请选择1~11操作\n");

printf("\t1.追加法建表\n");printf("\\n");

printf("\t2.插入法建表\n");printf("\\n");

printf("\t3.输出链表1\n");printf("\\n");

printf("\t4.输出链表2\n");printf("\\n");

printf("\t5.插入链表1\n");printf("\\n");

printf("\t6.插入链表2\n");printf("\\n");

printf("\t7.删除链表1\n");printf("\\n");

printf("\t8.删除链表2\n");printf("\\n");

printf("\t9.查找链表1\n");printf("\\n");

printf("\t10.查找链表2\n");printf("\\n");

printf("\t11.退出系统\n");printf("\\n");

printf("\t请您选择1-11:

");

scanf("%d",&cn);//gets(s);

//cn=atoi(s);

if(cn<1||cn>11)

printf("\n\t输入错误,重选1-11:

");

elsebreak;}

returncn;}

四、运行结果

主菜单程序

在链表1中输入学生信息1q3e5t然后输出链表1

在表1中插入学生信息2w4r(可循环插入)

在表1中插入学生信息”2w4r”以后的输出截图

在表1中删除学生信息1q3e(可循环删除)

在表1中删除学生信息1q3e以后的输出截图

如果删除表1中没有的学生信息,比如8h则提示找不到该学号

在表1中查找学生信息5t(可循环查找)

如果查找表1中没有的学生信息,比如8h则提示找不到该学号

在链表2中输入学生信息1q3e5t然后输出链表2

在表2中插入学生信息2w4r(可循环插入)

在表2中插入学生信息”2w4r”以后的输出截图

在表2中删除学生信息1q3e(可循环删除)

在表2中删除学生信息1q3e以后的输出截图

如果删除表2中没有的学生信息,比如8h则提示找不到该学号

在表2中查找学生信息5t(可循环查找)

如果查找表2中没有的学生信息,比如8h则提示找不到该学号

退出系统截图

 

三、小结体会

此次C语言程序开发设计实践给我带来了许多好处,我受益匪浅!

课程设计是培养提高学生综合运用自己平时所学的知识发现问题、提出问题、分析问题和解决问题能力的重要环节,是对学生实际工作能力的具体训练和考察过程。

回顾起此次C语言课程设计,我感慨颇多,从拿到题目到完成整个设计,从理论到实践,在整整两周的日子里,可以学到很多很多的的东西,不仅可以巩固了以前所学的知识,而且学到了很多只在书本上永远也得不到的知识。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

在设计的过程中遇到问题很严重,这毕竟第一次做,难免会遇到过各种各样的问题,但我及时通过和同学交流,向老师提问等各种方法解决问题。

同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体…在暑假里我要把以前学过的知识全部复习一遍,巩固加强。

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

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2