C语言课程设计报告
目 录
1 需求分析
1.1 问题分析
1.2 采用技术
1.3 设计目标
2 总体设计
2.1 系统流程设计
2.2 系统模块设计
3 详细设计
3.1 模块功能说明
3.2 模块流程图
3.3 界面设计
4 测试结果
5 程序清单
6 设计体会
模拟计算器程序
1 需求分析
1.1 问题分析
途中遇到清屏,算法错误
1.2 采用技术
开发工具
C语言
运行环境
(1)WINDOWS2000/XP系统
(2)TurboC2.0编译环境
1.3 设计目标
编写一个程序来实现算术计算器。通过结构体数组和共用体数组来存放输入的每一数字或运算符号的记录(包括1、2、3等数字,+、--、*、等运算符号),然后将其信息存入文件中。输入一个算术计算式,就在屏幕上显示结果。
2 总体设计
2.1 系统流程设计
调用函数:
#include <stdio.h>
#include <conio.h>
函数声明:
void menu();
void add();
void sub();
void mul();
void div();
void add_n_to_m();
清屏功能代码
调用部分 进行功能键设置
自定义函数
用算模块
2.2 系统模块设计
void add()//加法运算
{
double a,b;
printf("input two numbers:");
scanf("%lf%lf",&a,&b);
printf("%lf+%lf=%lf\n",a,b,a+b);
}
void sub()//减法运算
{
double a,b;
printf("input two numbers:");
scanf("%lf%lf",&a,&b);
printf("%lf-%lf=%lf\n",a,b,a-b);
}
void mul()//乘法运算
{
double a,b;
printf("input two numbers:");
scanf("%lf%lf",&a,&b);
printf("%lf*%lf=%lf\n",a,b,a*b);
}
void div()//除法运算
{
double a,b;
printf("input two numbers:");
scanf("%lf%lf",&a,&b);
if(b==0)//被除数不能为0
printf("error\n");
else
printf("%lf/%lf=%lf\n",a,b,a/b);
}
void add_n_to_m()//累加
{
int m,n,i=0,s=0;
printf("input n and m:");
scanf("%d%d",&n,&m);
if(n>m) printf("error.\n");//条件限制
else
{
for(i=n;i<=m;i++)
s+=i;
printf("%d+...+%d=%d\n",n,m,s);
}
}
3 详细设计
3.1 模块功能说明
void add(); 加法运算
void sub(); 减法运算
void mul(); 乘法运算
void div(); 除法运算
void add_n_to_m(); 数字n到m的和
3.3 界面设计
技术原因没能实现
4 测试结果
5 程序清单
#include <stdio.h>//头文件
#include <conio.h>
void menu();//声明部分
void add();
void sub();
void mul();
void div();
void add_n_to_m();
main()
{
int i;
while(1)
{
system("cls");//清屏功能
menu();
printf("choose function:");
scanf("%d",&i);
switch(i)
{
case 1:add();getch();break;//调用部分
case 2:sub();getch();break;
case 3:mul();getch();break;
case 4:div();getch();break;
case 5:add_n_to_m();getch();break;
case 6: exit(0);break;
}
}
}
//以下是自己定义的函数
void menu()//菜单
{
{
{
printf("+------DI 6 ZU---+\n");说明:用行什么算法就先输入1-6,
printf("+zuyuan: ++gongneng: +\n"); 如加法就是1
printf("+ changyongheng ++1,jia fa +\n");
printf("+ jinglei ++2,jian fa +\n");
printf("+ liqiang ++3,cheng fa +\n");
printf("+ wubing ++4,chu fa +\n");
printf("+ liuguozhang ++5,n-m de he +\n");
printf("+ wuzhenhua ++6,quie +\n");
printf("+----------------------------------\n");
}
void add()//加法运算
{
double a,b;
printf("input two numbers:");
scanf("%lf%lf",&a,&b);
printf("%lf+%lf=%lf\n",a,b,a+b);
}
void sub()//减法运算
{
double a,b;
printf("input two numbers:");
scanf("%lf%lf",&a,&b);
printf("%lf-%lf=%lf\n",a,b,a-b);
}
void mul()//乘法运算
{
double a,b;
printf("input two numbers:");
scanf("%lf%lf",&a,&b);
printf("%lf*%lf=%lf\n",a,b,a*b);
}
void div()//除法运算
{
double a,b;
printf("input two numbers:");
scanf("%lf%lf",&a,&b);
if(b==0)//被除数不能为0
printf("error\n");
else
printf("%lf/%lf=%lf\n",a,b,a/b);
}
void add_n_to_m()//累加
{
int m,n,i=0,s=0;
printf("input n and m:");
scanf("%d%d",&n,&m);
if(n>m) printf("error.\n");//条件限制
else
{
for(i=n;i<=m;i++)
s+=i;
printf("%d+...+%d=%d\n",n,m,s);
}
}
6 设计体会
这次课程设计让我们学到了很多,从编程中可以看出编写一个程序的是一件很难的事。在此也要感谢其他给予我帮助的同学。
时间安排表
课程设计评定表
附录1 每周工作记录
附录2 问题记录
中 国 地 质 大 学 本科生课程论文封面
课程名称 教师姓名本科生姓名 本科生学号 本科生专业 所在院系 类别: 日期:
1
课程设计评语
注:1、无评阅人签名成绩无效;
2、必须用钢笔或圆珠笔批阅,用铅笔阅卷无效;
3、如有平时成绩,必须在上面评分表中标出,并计算入总成绩。
2
目 录
课程设计评语 ...................................................................................................................................... 2
目 录.................................................................................................................................................... 3
1.课程论文题目 ................................................................................................................................ 4
2.程序设计思路 ................................................................................................................................ 4
3.功能模块图 .................................................................................................................................... 4
4.数据结构设计 ................................................................................................................................ 5
5.算法设计 ........................................................................................................................................ 5
6.程序代码 ........................................................................................................................................ 5
7.程序运行结果 .............................................................................................................................. 12
8.编程中遇到的困难及解决方法 .................................................................................................. 13
9.总结心得及良好建议 .................................................................................................................. 13
10.致谢 ............................................................................................................................................ 13
3
1.课程论文题目
NO.4 一种简单的英文词典排版系统的实现
1) 题目要求
(1) 能输入和显示所打的单词。
(2) 能分辨出单词。
(3) 对重复的单词和已经输入的单词能自动排除。
(4) 能按A-Z的顺序排版。
(5) 能将运行结果以文本形式存储。
(6) 具有添加新单词并重新排版的能力。
2) 需求分析
运行结果以文本方式存储,因而要提供文件的输入输出操作;通过查找操作检查重复单词;提供排序操作实现按A-Z的顺序排版;提供插入操作添加新单词并重新排版。另外通过键盘式菜单实现功能操作选择。
3) 总体设计
整个系统被设计为单词录入模块、文件存储模块和单词浏览模块。其中单词录入模块要完成输入单词、检查是否重复、排序操作。文件存储模块把存放单词的数组中的数据写入文件。单词浏览模块完成英文词典的输出,即文件的输出操作/。
4) 数据结构采用指针数组或二维数组。以回车键或空格键作为单词输入结束标志,对重复的单词自动排除可选第一章提到的查找方法,数据结构可采用指针和数组。
2.程序设计思路
整个系统被设计为四个模块:单词录入、文件存储、单词浏览。 单词录入模块:输入单词,检查是否重复以及排序操作。
文件存储模块:把存放单词的词组中的数据写入文件。
单词浏览模块:英文词典的输出。
3.功能模块图
4
4.数据结构设计
数据结构采用指针数组或二维数组:char* dictionary[N];或 char dictionary[N][20]。其中N是宏定义#define N 256 (表示单词个数)
(1)单词录入模块
输入一个单词,存放在一个临时字符数组中,然后换行输出刚刚输入的单词。采用插入排序算法的思想把该单词插入单词数组中,如果两个单词相同则不插入。
(2)文件存储模块
采用fwrite或fprintf把单词数组输入到文件中。
(3)单词浏览模块
采用fread或fscanf把单词从文件中读出,然后输出。
5.算法设计
[流程图]
6.程序代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 1000
char dic[N][20];
FILE *p;
/*清屏*/
void clear()
5
{
system("cls");
}
/*写入文件*/
void Write( int r )
{
int i;
p = fopen( "Data.txt", "w" );
for( i = 0; i < r; i++ )
{
fprintf( p, "%s\n", dic[i] );
}
fclose(p);
}
/*读取文件*/
int Read()
{
int r = 0;
p = fopen( "Data.txt", "r" );
while( fscanf( p, "%s", dic[r] ) != EOF )
{
r++;
}
fclose(p);
Write(r);
return r;
}
/*主菜单*/
void Print()
{
printf( "\n\n" );
printf( "********************************************************\n" ); printf( "* way = 1 : append words *\n" ); printf( "* way = 2 : lookup words *\n" ); printf("* way = 3 : end work *\n" ); printf("* way = 4 : cheak *\n" );
6
printf( "********************************************************\n" ); printf( "please choose a way = " );
}
/*字符排序*/
int sort( )
{
int i, j, flag = 1, r;
char s[20];
r = Read();
for( i = 1; i < r && flag == 1; i++ )
{
flag = 0;
for( j = 0; j < r-i; j++ )
{
if( strcmp( dic[j], dic[j+1] ) > 0 )
{
flag = 1;
strcpy( s, dic[j] );
strcpy( dic[j], dic[j+1] );
strcpy( dic[j+1], s );
}
}
}
Write( r );
return 0;
}
/*检查模块*/
void Cheak()
{
int r = 0;
clear();
p = fopen( "Data.txt", "r" );
while( fscanf( p, "%s", dic[r] ) != EOF )
{
printf( "%s ", dic[r] );
r++;
}
7
fclose(p);
Write(r);
if( r == 0 )printf( "there is no word in Data.txt\n" );
else
{
printf( "\n\nthere are %d words in Data.txt!\n", r );
}
}
void Insert( char *d )
{
int i;
char f[20];
int r = Read();
int flag = 0;
clear();
for( i = 0; i < r; i++ )
{
if( strcmp( d, dic[i] ) == 0 )
{
printf( "the word %s has already existed\n",d );
flag = 1;
break;
}
}
if( flag == 0 )
{
printf( "the word %s is successfully added\n", d );
strcpy( dic[r], d );
r++;
}
printf( "\n\ncontinue adding,please input a word;back to main menu,input 0 :\n" ); while( scanf( "%s", f ) && ! ( f[0] == '0' && f[1] == 0 ) )
{
flag = 0;
for( i = 0; i < r; i++ )
{
if( strcmp( f, dic[i] ) == 0 )
8
{
clear();
printf( "the word %s has already existed\n",d );
flag = 1;
break;
}
}
if( flag == 0 )
{
clear();
printf( "the word %s is successfully added\n", f );
strcpy( dic[r], f );
r++;
}
printf( "\n\ncontinue adding,please input a word;back to main menu,input 0 :\n" ); }
Write( r );
sort();
clear();
return;
}
/*查找已录入单词*/
void Find( char *s )
{
char t[20];
int flag = 0;
char f[20];
int r = 0, c, i;
int temp;
p = fopen( "Data.txt", "r" );
clear();
while( fscanf( p, "%s", t ) != EOF )
{
strcpy( dic[r], t );
r++;
temp = strcmp( s, t );
if( temp == 0 )
{
c = r;
9
flag = 1;
}
}
Write( r );
if( flag )
{
printf( "%s's sequence number is %d!\n", s, c );
}
else
{
printf( "can not find %s!\n", s );
}
printf( "\n\ncontinue lookuping,please input a word;back to main menu,input 0 :\n" ); while( scanf( "%s", f ) && ! ( f[0] == '0' && f[1] == 0 ) )
{
flag = 0;
for( i = 0; i < r; i++ )
{
if( strcmp( f, dic[i] ) == 0 )
{
flag = 1;
c = i+1;
break;
}
}
if( flag )
{
clear();
printf( "%s's sequence number is %d!\n", f, c );
}
else
{
clear();
printf( "can not find %s!\n", f );
}
printf( "\n\ncontinue lookuping,please input a word;back to main menu,input 0 :\n" );
}
clear();
return;
}
10
/*菜单选择模块*/
void Work()
{
int i, way;
char d[20];
while( 1 )
{
Print();
scanf( "%d", &way );
switch( way )
{
case 1:
printf( "please input a word : " );
scanf( "%s", d );
Insert(d );
break;
case 2:
printf( "please input a word : " );
scanf( "%s", d );
Find( d );
break;
case 3:
printf( "all the words are saved in Data.txt !" ); return;
case 4:
clear();
Cheak();
}
}
}
/*主函数*/
void main()
{
Cheak();
sort();
Work();
}
11
7.程序运行结果 (1)主菜单
(2)添加单词界面
(3)检查输入的单词
12
8.编程中遇到的困难及解决方法
1) 我认为在编程的过程中很容易出现一个问题就是忘记打‘;’号,导致几处出错。
2) 还有在头文件中定义了子函数,但是后来又忘记写了。有的时候程序是不会检
查出错误的,但是运行的时候就会出错。所以我觉得在以后的编程过程中,最好用什么函数就写什么函数,然后再在头文件下声明比较好。
9.总结心得及良好建议
其实在刚开始上课的时候,听得不是很懂,甚至云里雾里,后来经过很多学长老师的指导后,知道了,上课之前是要预习的,如果忘记预习了,下了课后必定还要花时间去看书,既然这样不如早先预习来得好,而且效率也会大大提高。另外要编写一个大程序首先要有一个整体思路,就象上面的程序,有大致的模块分化,也有各模块中的子函数的参与。然后各模块之间的联系也是非常重要的。然后就是检查错误,一定是要细心的。实在不懂的可以去找老师答疑。
10.致谢
真诚的感谢在编写程序中帮助我的老师们,我想没有你们我的程序也不会正确运行。谢谢!
13
东莞理工学院《C语言程序设计》课程设计题目:图书信息管理系统院系:电子工程学院专业:电子信息工程年级:20##班别:2班指导教师:…
C语言程序设计课程设计学生姓名学号系院专业设计论文题目学生选课系统管理完成日期20xx年6月指导教师目录一实验目的二实验内容三总体…
河南理工大学计算机科学与技术学院课程设计报告20XX20XX学年第一学期课程名称C语言课程设计设计题目《小学算术运算测试》学生姓名…
C语言课程设计报告设计题目专业班级学号姓名任课老师时间目录一课程设计题目及所涉及知识点二课程设计思路及设计流程图三课程设计中遇到的…
C语言程序设计课程设计报告20xx20xx学年第1学期题目专业班级姓名学号指导教师成绩计算机科学与技术系20xx年12月31日目录…
大连交通大学软件学院C语言课程设计报告SOFTWAREINSTITUTEOFDALIANJIAOTONGUNIVERSITYEXP…
海南大学三亚学院信息管理与信息系统专业课程设计实验报告题目C语言程序设计实习分院管理分院专业信息管理与信息系统班级信管0902姓名…
3130111103福建工程学院C语言课程设计报告班级机械1301学号姓名指导教师日期20xx123020xx1331301111…
沈阳航空航天大学课程设计报告课程设计名称C语言课程设计课程设计题目猜数游戏院系计算机学院专业计算机科学与技术班级04010101学…
附表2C或C语言课程设计总结报告源代码学生通讯录管理系统能够实现对通讯录的内容进行创建显示查询删除以及修改等功能includelt…