C语言课程设计_c语言课程设计
C语言课程设计由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“c语言课程设计”。
华 北 水 利 水 电 学 院
课
程
设
计
报
告
书
环 节 名 称:专 业 班 级:姓
名
:学
号
:院、系
:指 导 教 师:
2012——2013学年
第 二 学期
高级语言课程设计(C语言)
信息与计算科学专业165班
孙志攀
201216511
数学与信息科学学院
海
燕
必做题
1.输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写3个函数:①求最小数、最大数的位置
;②进行对换处理③主函数
程序源代码:
#include void ptin(int*p,int n){ int i;
printf(“请输入%d个整数:”,n);for(i=0;i
if(*max
if(*min>*(p+i))min=p+i;} i=*min;*min=*p;*p=i;i=*max;*max=*(p+n-1);*(p+n-1)=i;} void ptout(int*p,int n){ int i;printf(“输出%d个数:n”,n);for(i=0;i
2.将一组字符串按字典顺序输出。(通过函数调用完成)
程序源代码:
#include #include void paixu(char *a[],int n){ int i,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;
} } } void main(){
int i,n=10;
char c[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 #define N 3
typedef struct student {
int num;
char name[20];
struct student *next;}STU;
STU *create(){
int i;
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
{
free(p);break;
}
if(head==NULL)
head=p;
else
tail->next=p;
tail=p;
}
return head;}
void output(STU *p){
while(p!=NULL)
{
printf(“%dt%sn”,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;
}
return head;}
int main(int argc, 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);
return 0;} 程序的运行结果(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.浏览通讯录
开始 int i:i=1 i
输入一个记录
i++ 结束
四、编写代码
程序源代码:
#include #include #include #define N 200 #define HEADER1 “*********************电话簿***********************n” #define HEADER2 “| 序号 | 姓名 | 电话 | 工作单位 |n” #define HEADER3 “|--------|--------|--------|------------|n” #define FORMAT “| %-8d|%-14s|%-17s|%-22s|n” #define DATA p->num,p->name,p->telnumber,p->units #define END “-----------------------n”
typedef struct teldir { int num;char name[15];char telnumber[15];char units[30];}TEL;typedef struct pointer_info { TEL *pHead;int count;char fname[15];int saveflag;}PI;void menu(){ 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”);} void Swap(TEL *p1,TEL *p2){ TEL stmp;stmp=*p1;*p1=*p2;*p2=stmp;} void printheader(){ printf(HEADER1);printf(HEADER2);printf(HEADER3);} void Load(PI *pi){
FILE *fp;TEL *p=pi->pHead;char fname[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);} void Disp(PI *pi){ int i;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;icount;i++){ printf(FORMAT,DATA);printf(HEADER3);p++;}
} void Sort(PI *pi){ int i,j;int sel;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请选择(1 or 2):”);scanf(“%d”,&sel);if(sel!=1&&sel!=2){ system(“cls”);menu();printf(“请选择(0-8):”);return;} if(sel==1){ for(i=1;icount-1;i++){ p=pi->pHead;for(j=1;jcount-i;j++,p++){ if(p->num>(p+1)->num)
Swap(p,p+1);} } pi->saveflag=1;} else if(sel==2){ for(i=1;icount-1;i++){ p=pi->pHead;for(j=1;jcount-i;j++,p++){ if(strcmp(p->name,(p+1)->name)>0)Swap(p,p+1);} } } Disp(pi);printf(“请选择(0-8):”);} void Del(PI *pi){ int sel;int num;
char name[15];TEL *p;int i;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请选择(1 or 2):”);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;icount;i++)
{ if(num==p->num)break;p++;} if(i>pi->count){ printf(“无此人!n”);printf(“请选择(0-8):”);return;} else if(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”);} }
else if(sel=2){ printf(“请输入要删除的姓名:”);scanf(“%s”,name);for(i=1;icount;i++){ if(!strcmp(name,p->name))break;p++;} if(i>pi->count){ printf(“无此人!n”);menu();printf(“请选择(0-8):”);return;} else if(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):”);} void Modify(PI *pi){ int num,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;i
count;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);} void Qur(PI *pi){ int sel,i,num;TEL *p;char name[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请选择(1 or 2):”);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;icount;i++){ if(num==p->num)break;p++;} if(i>pi->count){ printf(“无此人!n”);printf(“请选择(0-8):”);return;} else { printheader();printf(FORMAT,DATA);
printf(END);} } else if(sel==2){ printf(“请输入要查询的姓名:”);scanf(“%s”,name);for(i=1;icount;i++){ if(!strcmp(name,p->name))break;p++;} if(i>pi->count){ printf(“无此人!n”);printf(“请选择(0-8):”);return;} else { printheader();printf(FORMAT,DATA);printf(END);} } fclose(fp);printf(“请选择(0-8):”);} void Add(PI *pi){ int num;int i,numRepeatFlag=0;
TEL *pstu,*p;FILE *fp=NULL;fp=fopen(pi->fname,“a”);if(fp==NULL){ printf(“nError!n”);return;} do { pstu=pi->pHead+pi->count;p=pi->pHead;printf(“请输入序号((1-200),0返回菜单):”);scanf(“%d”,&num);for(i=0;i
count;i++){ if(num==p->num){ printf(“这个序号已存在,请重新输入另一个序号!n”);numRepeatFlag=1;
break;} p++;} if(numRepeatFlag){ numRepeatFlag=0;continue;} if(num!=0)pstu->num=num;else { menu();printf(“请选择(0-8):”);break;} printf(“请输入姓名:”);scanf(“%s”,pstu->name);printf(“请输入电话:”);scanf(“%s”,pstu->telnumber);printf(“请输入工作单位:”);scanf(“%s”,pstu->units);fprintf(fp,“%-8d %-14s %-17s %-22sn”,pstu->num,pstu->name,pstu->telnumber,pstu->units);pi->count++;pi->saveflag=1;}while(1);fclose(fp);} void New(PI *pi){ FILE *fp;char fname[15];printf(“请输入新建数据文件名:”);
scanf(“%s”,fname);strcat(fname,“.txt”);fp=fopen(fname,“wb”);if(fp==NULL){ printf(“n=====>无法打开文件!n”);return;} strcpy(pi->fname,fname);printf(“请选择(0-8):”);fclose(fp);}
void Save(PI *pi){ FILE *fp;int numwriten;if(!strlen(pi->fname))New(pi);fp=fopen(pi->fname,“wb”);if(fp==NULL){ printf(“n====>打开文件失败!n”);fclose(fp);return;} if(pi->count){ numwriten=fwrite(pi->pHead,pi->count*sizeof(TEL),1,fp);pi->saveflag=0;printf(“n文件保存成功!n”);} else printf(“n没有记录保存!”);fclose(fp);} void main(){ int sel;TEL *pstu;PI pi;pstu=(TEL*)malloc(N *sizeof(TEL));pi.pHead=pstu;pi.count=0;pi.fname[0]='n';pi.saveflag=0;menu();printf(“请选择(0-8):”);do { scanf(“%d”,&sel);if(sel==0){ if(pi.saveflag==1){ if(strlen(pi.fname))Save(&pi);
else { New(&pi);Save(&pi);} } break;} switch(sel){ case 1: New(&pi);break;case 2: Load(&pi);break;case 3: Add(&pi);break;case 4: Qur(&pi);break;case 5: Modify(&pi);break;case 6: Del(&pi);break;case 7: Sort(&pi);break;case 8: { Disp(&pi);printf(“请按任意键继续:”);getchar();getchar();menu();printf(“请选择(0-8):”);break;} default: printf(“n输入错误!重新选择(0-8)!n”);break;} }while(1);pstu=pi.pHead;free(pstu);} 程序的运行结果(I/O窗口截图)
注意:
截 图 见 下 页
五、调试总结 心得体会:
通过这次课程设计,我越来越发现了计算机编程的重要作用,也渐渐的对C语言产生了兴趣。在这个信息社会,科技不断进步,计算机编程将成为一个无可取代的行业,并在高新科技产业中起到支柱作用,掌握程序设计是未来大学生就业的必要技能。在上机程序编译过程中,我发现一种算法可以有多种编译源代码,只有牢固的掌握专业知识和技巧才能在编译过程中行云流水。程序设计过程中我们必须注意细节,否则会出现各种各样的错误。最后我想说,我会继续努力,勤加练习,争取学好这门科目,以便为将来的生活和工作打下基础.
- 11 前言让自己所学的知识应用于实际生活中,理论联系生活,学以致用,我们将更好服务于民。我们是新一代的年轻人,要想将来在社会上更好的立足,就必须让自己强大起来,努力的学习新......
汇编语言课程实验报告实验名称课程设计1 实验环境硬件平台:Intel Core i5-3210M 操作系统:DOSBox 0.74 in Windows 8.1 软件工具:Turbo C 2.0, Debug, MASM 实验内容将实验7中......
1,/*100-999内的水仙花数的个数*/ #include main() {int a,b,c,d,s,i=0;for(a=100;a{b=a/100;c=a%100/10;d=a%10;s=b*b*b+c*c*c+d*d*d;if(a==s)i++;}printf("%d",i);getch......
C语言课程设计总结报告学院:电气学院专业:电子信息科学与技术 学号: 姓名: 一目的:课程设计为我们提供了一个既动手又动脑,独立实践的机会,让我们将课本上的理论知识和实际有机的......
C语言课程设计飞机空战小游戏一、实验环境运行系统 WINDOWSXP 编程工具C++6.0 地点 程序设计与仿真实验室桌号19电脑IP地址221.12.10.218 二、实验目的和要求 实验目的:(1)使学......
