C语言课程设计.docx

上传人:b****3 文档编号:24710805 上传时间:2023-05-31 格式:DOCX 页数:30 大小:64.81KB
下载 相关 举报
C语言课程设计.docx_第1页
第1页 / 共30页
C语言课程设计.docx_第2页
第2页 / 共30页
C语言课程设计.docx_第3页
第3页 / 共30页
C语言课程设计.docx_第4页
第4页 / 共30页
C语言课程设计.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

C语言课程设计.docx

《C语言课程设计.docx》由会员分享,可在线阅读,更多相关《C语言课程设计.docx(30页珍藏版)》请在冰豆网上搜索。

C语言课程设计.docx

C语言课程设计

华北水利水电学院

课程设计报告书

2012——2013学年

第二学期

 

环节名称:

高级语言课程设计(C语言)

专业班级:

信息与计算科学专业165班

姓名:

孙志攀

学号:

201216511

院、系:

数学与信息科学学院

指导教师:

海燕

 

必做题

1.输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。

写3个函数:

①求最小数、最大数的位置;②进行对换处理③主函数

程序源代码:

#include

voidptin(int*p,intn)

{

inti;

printf("请输入%d个整数:

",n);

for(i=0;i

}

voidpr(int*p,intn)

{

inti,*max,*min;

max=min=p;

for(i=1;i

{

if(*max<*(p+i))max=p+i;

if(*min>*(p+i))min=p+i;

}

i=*min;*min=*p;*p=i;

i=*max;*max=*(p+n-1);*(p+n-1)=i;

}

voidptout(int*p,intn)

{

inti;

printf("输出%d个数:

\n",n);

for(i=0;i

printf("\n");

}

voidmain()

{

inta[10];

ptin(a,10);

printf("处理前");

ptout(a,10);

pr(a,10);

printf("处理后");

ptout(a,10);

}

2.将一组字符串按字典顺序输出。

(通过函数调用完成)

程序源代码:

#include

#include

voidpaixu(char*a[],intn)

{

inti,j;

char*b;

for(i=0;i

{

for(j=i+1;j

if(strcmp(a[i],a[j])>0)

{

b=a[i];

a[i]=a[j];

a[j]=b;

}

}

}

voidmain()

{

inti,n=10;

charc[10][20];

char*t[10];

printf("请输入十个字符串:

");

for(i=0;i

{

scanf("%s",c[i]);

t[i]=c[i];

}

paixu(t,n);

printf("按字典顺序排列,结果为:

");

for(i=0;i

printf("%s",t[i]);

printf("\n");

}

3.有两个链表a和b,结点中包含学号和姓名。

编写函数delete,从a链表中删去与b链表中有相同学号的结点。

程序源代码:

#include

#include

#defineN3

typedefstructstudent

{

intnum;

charname[20];

structstudent*next;

}STU;

STU*create()

{

inti;

STU*p,*head=NULL,*tail=head;

for(i=0;i

{

p=(STU*)malloc(sizeof(STU));

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

p->next=NULL;

if(p->num<0)

{

free(p);break;

}

if(head==NULL)

head=p;

else

tail->next=p;

tail=p;

}

returnhead;

}

voidoutput(STU*p)

{

while(p!

=NULL)

{

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

p=p->next;

}

}

STU*del(STU*a,STU*b)

{

STU*head,*p1,*p2;

p1=p2=head=a;//让p1、p2、head结点指向链表a的头部

while(b!

=NULL)

{

p1=p2=head;//每次循环前让p1、p2始终指向删除后链表的头部

while(p1!

=NULL)

{

if(b->num==p1->num)//学号相同,删除结点信息

if(p1==head)//如果删除的是头结点,则头结点位置要后移

{

head=p1->next;

free(p1);

p1=p2=head;

}

else//如果删除的是中间结点

{

p2->next=p1->next;

free(p1);

p1=p2->next;

}

else//学号不同,则p1,p2指针依次后移

{

p2=p1;

p1=p1->next;

}

}

b=b->next;

}

returnhead;

}

intmain(intargc,char*argv[])

{

STU*a,*b,*c;

printf("\n请输入链表a的信息格式(学号姓名):

\n");

a=create();

printf("\n请输入链表b的信息格式(学号姓名):

\n");

b=create();

c=del(a,b);

printf("\n经过删除后,a链表信息为:

\n");

output(c);

return0;

}

程序的运行结果(I/O窗口截图)

选做题

(任选其一)

1、电话簿管理系统

一、需求分析

设计一个电话簿管理系统,使之提供以下功能:

(1)新建信息功能

(2)查询信息功能

(3)添加信息功能

(4)修改信息功能

(5)删除信息功能

需求说明:

(1)电话信息包括姓名(规定字节数为15)、电话号码(规定字节数为15)和工作单位(最大字节数为30)等信息。

(2)录入的信息要求存入文件,并可以通过读取数据文件进行查询、修改、删除等基本操作。

(3)对电话簿中的信息应能够分别按序号和姓名两种方式进行查询,并返回所有符合条件的信息。

(4)修改、删除、添加等操作要求可以按照序号和姓名两种方式进行,并返回操作后的信息。

(5)所设计的通讯系统要求以菜单方式工作,为用户提供清晰的使用提示,根据用户的选择进行各种处理。

(6)需设计主控制菜单程序(menu()函数),实现菜单选择模块。

(7)该系统中的各个子功能均需通过相应的自定义函数进行实现。

二、总体设计

初步提出解决方案,以及系统的体系结构和数据结构的设计方案,并写出书面总体设计说明书。

(1)设计主控制菜单程序(menu()函数),实现菜单选择模块。

①输出功能菜单(包括新建、读取文件、添加、查询、修改、删除、浏览、排序等)。

②按提示信息选择功能菜单,并输出返回值。

(2)设计New()函数,实现新建数据文件功能。

(3)设计Load()函数,实现文件读取功能,若文件不存在,则返回New(),进入新建数据文件。

(4)设计Add()函数,实现信息添加功能,分别录入序号、姓名、电话和工作单位。

若序号已存在,则重新输入。

(5)设计Qur()函数,实现信息查询功能,通过设计提示菜单,实现按序号和姓名两种方式查询。

(6)设计Modify()函数,实现信息修改功能,在修改前,首先显示所有信息,然后通过序号实现修改。

(7)设计Del()函数,实现信息删除功能,通过设计提示菜单,实现序号和姓名两种方式进行删除。

(8)设计Sort()函数,实现信息排序功能,通过设计提示菜单,实现按序号和姓名两种方式进行排序。

(9)设计Disp()函数,实现信息浏览功能。

(10)设计Save()函数,实现信息保存功能,将新建或读取的文件,在退出程序后进行保存。

三、详细设计给出主要流程图

(1)系统功能模块图:

主菜单

新建文件

读取文件

添加通讯录

查询通讯录

修改通讯录

删除通讯录

排序通讯录

浏览通讯录

新建:

可以新建文件,新建文件自己输入文件名字.txt。

读取:

通过成功读取可以在文件中实现以下功能。

添加:

可以添加通讯录,依次输入序号、姓名、电话、工作单位,会提示推出。

查询:

可以选择用序号、姓名的方式查询。

修改:

输入欲修改的那个人的信息,通过输入序号和姓名来修改通讯录信息。

删除:

输入欲删除的那个人的序号或姓名,来删除信息。

排序:

可以通过序号排序,或者通过姓名的拼音排序来排序。

浏览:

可以通过序号、姓名浏览通讯录。

(2)工作流程图

1、添加通讯录

开始

i=0

Sign!

=’n’&&sign!

=’N’

输入信息

return(n+1)

结束

2.查询通讯录

开始

输入查询的姓名

判断通讯录中是否有此人

输出“通讯录中没有此人”

显示该人所有记录

结束

3.删除通讯录

4.修改通讯录

开始

输入查询的姓名

判断通讯录中是否有此人

输出“通讯录中没有此人”

依次输入修改的内容

结束

开始

输入查询的姓名

判断通讯录中是否有此人

输出“通讯录中没有此人”

显示该人所有记录

结束

5.浏览通讯录

开始

inti:

i=1

i

输入一个记录

i++

结束

四、编写代码

程序源代码:

#include

#include

#include

#defineN200

#defineHEADER1"*********************电话簿***********************\n"

#defineHEADER2"|序号|姓名|电话|工作单位|\n"

#defineHEADER3"|--------|--------|--------|------------|\n"

#defineFORMAT"|%-8d|%-14s|%-17s|%-22s|\n"

#defineDATAp->num,p->name,p->telnumber,p->units

#defineEND"------------------------------------------------------\n"

typedefstructteldir

{

intnum;

charname[15];

chartelnumber[15];

charunits[30];

}TEL;

typedefstructpointer_info

{

TEL*pHead;

intcount;

charfname[15];

intsaveflag;

}PI;

voidmenu()

{

system("cls");

printf("通讯录管理系统\n");

printf("**************MENU*********************\n");

printf("****1.新建文件***\n");

printf("****2.读取文件***\n");

printf("****3.添加通讯录***\n");

printf("****4.查询通讯录***\n");

printf("****5.修改通讯录***\n");

printf("****6.删除通讯录***\n");

printf("****7.排序通讯录***\n");

printf("****8.浏览通讯录***\n");

printf("****0.退出***\n");

printf("***************************************\n");

printf("\n");

}

voidSwap(TEL*p1,TEL*p2)

{

TELstmp;

stmp=*p1;

*p1=*p2;

*p2=stmp;

}

voidprintheader()

{

printf(HEADER1);

printf(HEADER2);

printf(HEADER3);

}

voidLoad(PI*pi)

{

FILE*fp;

TEL*p=pi->pHead;

charfname[15];

printf("请输入要加载的文件名:

");

scanf("%s",fname);

strcat(fname,".txt");

strcpy(pi->fname,fname);

fp=fopen(pi->fname,"rb");

if(fp==NULL)

{printf("\n==>无法打开文件!

请新建数据文件!

\n");

return;

}

pi->count=0;

pi->saveflag=0;

while(!

feof(fp))

{if(fread(p,sizeof(TEL),1,fp))

{pi->count++;

p++;

}

}

printf("成功读取数据文件!

",fname);

printf("\n请选择(0-8):

");

fclose(fp);

}

voidDisp(PI*pi)

{inti;

TEL*p;

FILE*fp=NULL;

fp=fopen(pi->fname,"r");

if(fp==NULL)

{printf("\nError!

\n");

return;

}

menu();

p=pi->pHead;

if(pi->count==0)

{printf("无记录!

");

printf("\n请选择(0-8):

");

return;

}

printheader();

for(i=1;i<=pi->count;i++)

{printf(FORMAT,DATA);

printf(HEADER3);

p++;

}

}

voidSort(PI*pi)

{inti,j;

intsel;

TEL*p;

FILE*fp=NULL;

fp=fopen(pi->fname,"rb+");

if(fp==NULL)

{printf("\nError!

\n");

return;}

system("cls");

printf("**************************\n");

printf("**1.按序号排序**\n");

printf("**2.按姓名排序**\n");

printf("**按任意键返回主菜单**\n");

printf("\n请选择(1or2):

");

scanf("%d",&sel);

if(sel!

=1&&sel!

=2)

{system("cls");

menu();

printf("请选择(0-8):

");

return;

}

if(sel==1)

{for(i=1;i<=pi->count-1;i++)

{p=pi->pHead;

for(j=1;j<=pi->count-i;j++,p++)

{if(p->num>(p+1)->num)

Swap(p,p+1);}

}

pi->saveflag=1;

}

elseif(sel==2)

{for(i=1;i<=pi->count-1;i++)

{p=pi->pHead;

for(j=1;j<=pi->count-i;j++,p++)

{if(strcmp(p->name,(p+1)->name)>0)

Swap(p,p+1);}

}

}

Disp(pi);

printf("请选择(0-8):

");

}

voidDel(PI*pi)

{intsel;

intnum;

charname[15];

TEL*p;

inti;

FILE*fp=NULL;

fp=fopen(pi->fname,"rb+");

if(fp==NULL)

{printf("\nError!

\n");

return;}

p=pi->pHead;

menu();

Disp(pi);

printf("**************************\n");

printf("***1.按序号删除***\n");

printf("***2.按姓名删除***\n");

printf("***按任意键返回主菜单***\n");

printf("\n请选择(1or2):

");

scanf("%d",&sel);

if(sel!

=1&&sel!

=2)

{system("cls");

menu();

printf("请选择(0-8):

");

return;}

if(sel==1)

{printf("请输入要删除记录的序号:

");

scanf("%d",&num);

for(i=1;i<=pi->count;i++)

{if(num==p->num)

break;

p++;

}

if(i>pi->count)

{printf("无此人!

\n");

printf("请选择(0-8):

");

return;}

elseif(i==pi->count)

{pi->count--;

pi->saveflag=1;

printf("记录成功删除!

\n");

}

else

{memcpy(p,p+1,(pi->pHead+pi->count-p)*sizeof(TEL));

pi->count--;

pi->saveflag=1;

printf("记录成功删除!

\n");

}

}

elseif(sel=2)

{printf("请输入要删除的姓名:

");

scanf("%s",name);

for(i=1;i<=pi->count;i++)

{if(!

strcmp(name,p->name))

break;

p++;

}

if(i>pi->count)

{printf("无此人!

\n");

menu();

printf("请选择(0-8):

");

return;

}

elseif(i==pi->count)

{pi->count--;

pi->saveflag=1;

printf("记录成功删除!

\n");

}

else

{memcpy(p,p+1,(pi->pHead+pi->count-p)*sizeof(TEL));

pi->count--;

pi->saveflag=1;

printf("记录成功删除!

\n");

}

}

fclose(fp);

printf("请选择(0-8):

");

}

voidModify(PI*pi)

{intnum,i;

TEL*p;

FILE*fp=NULL;

fp=fopen(pi->fname,"r");

if(fp==NULL)

{printf("\nError!

\n");

return;}

p=pi->pHead;

menu();

Disp(pi);

printf("请输入要修改的序号:

");

scanf("%d",&num);

for(i=1;icount;i++)

{if(num==p->num)

break;

p++;

}

if(i>pi->count)

{printf("无此人!

\n");

printf("请选择(0-8):

");

return;

}

else

{printf("请输入正确的序号:

(输入0返回菜单)");

scanf("%d",&num);

if(num!

=0)

p->num=num;

else

{menu();

printf("请选择(0-8):

");

return;

}

printf("请输入正确的姓名:

");

scanf("%s",p->name);

printf("请输入正确的电话:

");

scanf("%s",p->telnumber);

printf("请输入正确的工作单位:

");

scanf("%s",p->units);

pi->saveflag=1;

}

printf("请选择(0-8):

");

fclose(fp);

}

voidQur(PI*pi)

{intsel,i,num;

TEL*p;

charname[15];

FILE*fp=NULL;

fp=fopen(pi->fname,"r");

if(fp==NULL)

{printf("\nError!

\n");

return;}

p=pi->pHead;

menu();

printf("**************************\n");

printf("***1.按序号查询***\n");

printf("***2.按姓名查询***\n");

printf("***按任意键返回主菜单***\n");

printf("\n请选择(1or2):

");

scanf("%d",&sel);

if(sel!

=1&&sel!

=2)

{system("cls");

menu();

printf("请选择(0-8):

");

return;}

if(sel==1)

{printf("请输入要查询记录的序号:

");

scanf("%d",&num);

for(i=1;i<=pi->count;i++)

{if(num==p->num)

break;

p++;

}

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

当前位置:首页 > 农林牧渔 > 水产渔业

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

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