当前位置:文档之家› C语言课程设计报告 电子投票系统

C语言课程设计报告 电子投票系统

C语言课程设计报告 电子投票系统
C语言课程设计报告 电子投票系统

C语言课程设计报告

电子投票系统

学院计算机学院

专业

年级

姓名

学号

教师

年月日

广东工业大学计算机学院制一.设计题目

电子投票系统

二.课程设计目的

了解软件工程中的一些系统分析,模块分析,代码设计的概念,利用WIN-TC实现学生成绩管理系统的录入、查询、删除、统计等基本操作,使用单链表结构实现学生成绩管理,了解数据库管理的基本功能,掌握C语言中的结构体、指针、函数(系统函数、自定义函数)、文件操作等知识。通过对系统的分析和设计,进一步巩固C语言的学习,以提高对开发环境的进一步认识和综合编程能力。

三.系统功能

本系统程序功能:

(1)投票者功能

a.浏览所有候选人资料

b.查询要了解的候选人的信息

c.在了解候选人之后进行投票

(2)管理员功能

a.创建新的候选人资料

b.创建新的用户资料

c.查询要了解的候选人资料

d.浏览所有的候选人资料

e.对候选人票数进行统计并排序

四.系统功能模块结构图

本程序利用单链表存储结构完成对学生成绩的动态管理,其基本功能模块如下图所示:

图1程序功能模块结构图

五.程序设计及各模块函数功能简述

1.数据结构

链表是线形表的一种,线形表分为顺序存储结构和链式存储结构。线形表的顺序存储结构的特点是逻辑关系上相邻的两个元素物理位置上也相邻,因此可以随机存取表中任一元素。链式存储结构的特点是用一组任意的存储单元存储线形表的数据元素。链表的最大的优点是对表的添加、删除、查找、排序等操作比较方便,因此采用链表来存储候选人,投票人相关信息。且对结点的定义如下:

ttypedef struct candidate//候选人数据结构体

{

long number;//候选人编号

char name[20];//候选人姓名

char intro[400];//候选人简介

int vote;//候选人得票数

}candidate;

typedef struct user//投票者数据结构体

{

char name[20];//投票者姓名

char ps[8];//对应密码

int power;//权限

}user;

2.main()主函数

主函数是程序入口,采用模块化设计。创建用户文档,进行账号密码验证并根据账户不同调用不同函数进入不同的界面,执行不同的功能

3.main_a()管理员界面

根据输入数字的不同调用不同的函数进入对应的功能,返回主函数。相关的一些函数如下:

addcandidate(); // 创建候选人

addUser();//创建投票者

search(); //查询候选人信息

scan();//浏览候选人信息

sort();//整理所有投票

对菜单选项的选择是输入对应数字按回车键进行选择。

4.main_v(); 投票者者界面

根据输入数字的不同调用不同的函数进入对应的功能,返回主函数。相关的一些函数如下:

search(); //查询候选人信息

scan();//浏览候选人信息

vote(); //投票者投票

对菜单选项的选择是输入对应数字按回车键进行选择。

5.addcandidate(); 创建候选人

当用户选择该项对应数字后,进入该函数。创建候选人文档,输入候选人信息。用for 语句和if语句检查编号、姓名是否重复。在确认不再创建新候选人信息后输出所有候选人信息。

6.addUser()创建用户

当用户选择该项对应数字后,进入该函数。创建用户文档,输入用户账号与密码。用for语句和if语句检查账号名是否重复。在确认不再创建新用户信息后输出所有用户信息。

7.read()读取候选人信息

打开候选人文档,提取文档内内容

8.scan()浏览候选人信息

先调用read()读取候选人信息,利用for语句输出。

9.search() 查询候选人信息

先调用read()读取候选人信息,利用for语句查找与输入编号一致的候选人信息并输出,若查无此编号则输出“对不起,没有您要查询的候选人”。

10.sort()整理所有投票

先调用read()读取候选人信息,利用for语句,使用选择法对投票数进行排序,并输出。

11.vote()投票者投票

先调用read()读取候选人信息,输入候选人相应编号,利用for语句,将对应候选人的投票数+1,并返回到文档中,输出投票结果。若查无此编号,输出“投票失败!您要投票的号码不存在”。

六.结果

初始界面

分别输入1,1进入管理员界面

创建新候选人

输出候选人信息

投票者界面

投票以及投票结果

候选人票数排序结果

七.心得体会

在本次课程设计中,先使用结构化分析方法对系统进行分析,将整个系统细分为几个模块,再针对每个小模块编写代码。通过本次课程设计的学习以及老师的指导,学会了很多东西,了解了开发一个系统的一些步骤。尽管大部分都参考权威书籍的代码,但是在编写代码过程中还是加深了对链表的了解程度。开发工具用的是vc++6.0。这个程序还存在很多需要改进的地方,如密码输入后直接显示了出来,而不是*,缺少安全性;每个投票人不仅仅只能投一票等等。但我会继续努力学习,争取写出更好的程序

源代码

#include

#include

#include

#include

#define closegr closegraph

#define N 30

void main_a(); //管理员界面

void main_v(); //投票者者界面

void addcandidate(); // 创建候选人

void addUser();//创建投票者

void search(); //查询候选人信息

void scan();//浏览候选人信息

void vote(); //投票者投票

void read();//读取候选人信息

void save();//存储候选人信息

void sort();//整理所有投票

int total=0,c_total=0;

int i=0;

typedef struct candidate//候选人数据结构体{

long number;//候选人编号

char name[20];//候选人姓名

char intro[400];//候选人简介

int vote;//候选人得票数

}candidate;

typedef struct user//投票者数据结构体{

char name[20];//投票者姓名

char ps[8];//对应密码

int power;//权限

}user;

candidate c_man[N];

user total_user[N];

void main_v()//投票者者界面

{

int key;

do

{

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

printf("********************欢迎进入投票员界面***********************\n");

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

printf("** 1.浏览所有候选人 2.查询候选人信息**\n");

printf("** 3.投票 4.退出**\n");

scanf("%d",&key);

switch(key)

{

case 1:scan();break;

case 2:search();break;

case 3:vote();break;

case 4:break;

default:break;

}

}while(key!=4);

}

void vote() //投票者投票

{

long candidatenum;//定义进行操作时的临时结构体变量

int i,flag;

char DataFile[20]="候选人.txt",next;// DataFile存储候选人信息的文件名,next为是否进行下一次投标操作的选项

candidate TempS;

FILE *fp;

begin:

flag=0;//flag用来标志是否找对应编号,即投票是否成功

read();

printf("请输入您要投票的候选人的号码:");

scanf("%ld",&candidatenum);

printf("您所投票的候选人号码是:%ld\n",candidatenum);

for(i=0;i

{

if(c_man[i].number==candidatenum)

{

flag=1;

c_man[i].vote++;

}

}

if(flag)

{

printf("投票成功\n");

fp=fopen(DataFile,"wb");

if(fp==NULL)//如果当前文件不存在,提示打开文件失败

{

printf("\nOpen file is fail!End with any key.\n",DataFile);

perror("Open file fail");

getch();

exit(1);

}

for(i=0;i

{

fwrite(&c_man[i],sizeof(candidate),1,fp);

}

fclose(fp);

}

else

{

printf("投票失败!您要投票的号码不存在\n");

printf("按任意键返回首页!\n");

getch();

return;

}

fp=fopen(DataFile,"rb");// 显示投票后的情况

if(fp==NULL)

{

printf("\nOpen file %s fail! End With any key \n",DataFile);

perror("Open file fail");

getch();

exit(1);

}

printf("整理后的最新投票情况:\n");

printf("\n候选人号码\t候选人姓名\t票数\n");

while(fread(&TempS,sizeof(candidate),1,fp)!=(int)NULL)

{

if(TempS.number!=0)

printf("\n%ld \t%s \t%d \n",TempS.number,https://www.doczj.com/doc/a1531513.html,,TempS.vote);

}

fclose(fp);

printf("\n继续吗?是(Y)/否(N): ");

fflush(stdin);

next=getchar();

putchar('\n');

if(next=='y'||next=='Y')goto begin;

}

void main_a()//管理员界面

{

int key;

do

{

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

printf("********************欢迎进入管理员界面***********************\n");

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

printf("** 1.创建新候选人 2.创建新用户**\n");

printf("** 3.查询候选人信息 4.浏览所有候选人**\n");

printf("** 5.整理所有投票0.退出**\n");

scanf("%d",&key);

switch(key)

{

case 1:addcandidate();break;

case 2:addUser();break;

case 3:search();break;

case 4:scan();break;

case 5:sort(); break;

case 0:break;

default:break;

}

}while(key!=0);

}

void addcandidate()//创建候选人

{

char DataFile[20]="候选人.txt";

FILE * fp=NULL;

char c;

int over_flag=0;

candidate TempS;

read();

fp=fopen(DataFile,"ab+");

do

{

printf(" *****************创建新候选人*****************\n");

printf("请输入:");

printf("候选人号码:");scanf("%ld",&TempS.number);

for(i=0;i

{

if(TempS.number==c_man[i].number)

{

printf("该号码已存在.按任意键浏览所有候选人...");

getch();

over_flag=1;

break;

}

}

if (over_flag)

{

over_flag=0;

continue;

}

printf(" 姓名:");scanf("%s",&https://www.doczj.com/doc/a1531513.html,);

https://www.doczj.com/doc/a1531513.html,[19]='\0';

for(i=0;i

{

if(strcmp(https://www.doczj.com/doc/a1531513.html,,c_man[i].name)==0)

{

printf("该姓名已存在!请再输入一次!按任意键继续...");

getch();

over_flag=1;

break;

}

}

if (over_flag)

{

over_flag=0;

continue;

}

printf(" 简介:");

fflush(stdin);

gets(TempS.intro);

TempS.intro[399]='\0';

TempS.vote=0;

c_man[c_total]=TempS;//将数据加入原始数据,用于下一次输入比较

c_total++;

if(fwrite(&TempS,sizeof(candidate),1,fp)!=1)

{

printf("\nwrite file is fail! End with any key\n",DataFile);

perror("write file fail");

getch();

exit(1);

}

printf("要继续创建新的候选人吗?是(Y)/否(N): ");

fflush(stdin);

c=getchar();

}while(c=='Y'||c=='y');

fclose(fp);

printf("候选人资料:\n"); // 在屏幕上显示文件内容

printf("*****************************************************************");

fp=fopen(DataFile,"rb");

if(fp==NULL)

{

printf("\nOpen file %s fail! 任意键结束\n",DataFile);

perror("Open file fail");

getch();

exit(1);

}

while(fread(&TempS,sizeof(candidate),1,fp)!=(int)NULL)

{

printf("\n号码:%-15ld姓名:%-15s简介:%s",TempS.number,https://www.doczj.com/doc/a1531513.html,,TempS.intro);

}

fclose(fp);

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

printf("\n按任意键返回首页!");

getch();

}

void read()//读取候选人信息

{

char DataFile[20]="候选人.txt";

FILE * fp=NULL;

c_total=0;

fp=fopen(DataFile,"rb");

if(fp==NULL)

{

printf("\nOpen file %s fail! 任意键结束\n",DataFile);

perror("Open file fail");

getch();

exit(1);

}

while(fread(&c_man[c_total],sizeof(candidate),1,fp)!=(int)NULL)

{

c_total++;

}

fclose(fp);

}

void addUser()//创建用户

{

FILE *fp=NULL;

char DataFile[20]="用户.txt";//存储投票人信息的文件名

user TempS;

int over_flag=0;

char c;

fp=fopen(DataFile,"rb");//读入原始数据,用于检查输入是否有重复

if(fp==NULL)

{

printf("\nOpen file %s fail! 任意键结束\n",DataFile);

perror("Open file fail");

getch();

exit(1);

}

while(fread(&total_user[total],sizeof(user),1,fp)!=(int)NULL)

{

total++;

}

fclose(fp);

fp=fopen(DataFile,"ab+");

do

{

printf(" *****************创建新用户***************** ");

printf("请输入:");

printf("用户名:");scanf("%s",&https://www.doczj.com/doc/a1531513.html,);

https://www.doczj.com/doc/a1531513.html,[19]='\0';

for(i=0;i

{

if(strcmp(https://www.doczj.com/doc/a1531513.html,,total_user[i].name)==0)

{

printf("该用户名已存在!按任意键浏览所有用户...");

getch();

over_flag=1;

break;

}

}

if (over_flag)

{

over_flag=0;

continue;

}

printf(" 密码:");

scanf("%s",&TempS.ps);

TempS.ps[7]='\0';

printf(" 权限:");scanf("%d",&TempS.power);

if(TempS.power!=1)

{

TempS.power=0;

}

total_user[total]=TempS;//将数据加入原始数据

total++;

if(fwrite(&TempS,sizeof(user),1,fp)!=1)

{

printf("\nwrite file is fail! 任意键结束\n",DataFile);

perror("write file fail");

getch();

exit(1);

}

printf("要继续创建新用户吗?是(Y)/否(N):");

getchar();

c=getchar();

}while(c=='Y'||c=='y');

fclose(fp);

printf("用户资料数据处理完毕.\n",DataFile);//在屏幕上显示文件内容

printf("所有用户具体情况如下:\n");

fp=fopen(DataFile,"rb");

printf("************************************************************"); if(fp==NULL)

{

printf("\nOpen file is fail! End With any key \n",DataFile);

perror("Open file fail");

getch();

exit(1);

}

printf("\n姓名\t\t密码\t\t权限\n");

while(fread(&TempS,sizeof(user),1,fp)!=(int)NULL)

{

printf("\n%s\t\t%-8s\t\t%d\n",https://www.doczj.com/doc/a1531513.html,,TempS.ps,TempS.power);

}

fclose(fp);

printf("************************************************************");

printf("\n按任意键返回首页!");

getch();

}

void scan()//浏览候选人信息

{

read();

printf("候选人资料:\n");

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

for(i=0;i

{

printf("号码:%-15ld",c_man[i].number);

printf("姓名:%-19s",c_man[i].name);

printf("简介:%s\n",c_man[i].intro);

}

printf("***************************************************************");

printf("\n按任意键返回首页!");

getch();

}

void search() //查询候选人信息

{

char c;

long number;

int flag=0;

read();

do

{

printf("\n\t请输入要查询的候选人号码:");

scanf("%ld",&number);

for(i=0;i

{

if(number==c_man[i].number)

{

printf("\t您要查询的候选人信息如下:\n\n");

printf("\t号码:%ld \n",c_man[i].number);

printf("\t姓名:%s \n",c_man[i].name);

printf("\t简介:%s \n",c_man[i].intro);

flag=1;

break;

}

}

if (flag)

{

flag=0;

}

else

{

printf("\t对不起,没有您要查询的候选人\n");

}

printf("\t要继续查询候选人吗?是(Y)/否(N): ");

getchar();

c=getchar();

}while((c=='Y')||(c=='y'));

}

void sort()//整理所有投票

{

int i,k,j;

candidate c_man2[N]/*存放排序后的数据*/, temp;

read();

for(i=0;i

c_man2[i]=c_man[i];

for(i=0;i

{

k=i;

for(j=i+1;j

{

if(c_man2[k].vote

}

if(k!=i){

temp=c_man2[i];c_man2[i]=c_man2[k];c_man2[k]=temp;

}

} //排序结束

printf("票数从高到低排列如下:\n");

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

printf("*号码候选人票数*\n");

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

for(i=0;i

{

printf("* %-13ld %-13s %-6d *\n",c_man2[i].number,c_man2[i].name,c_man2[i].vote);

}

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

printf("按任意键返回首页!");

fflush(stdin);

getch();

}

void main()

{

FILE * fp=NULL;

char DataFile[20]="用户.txt";

char relogin;//是否重新登录的标志

int success=0;

user input_user,temp_user;

printf("管理员账号密码都为1\n");

printf("\n");

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

printf("********************欢迎登录电子投票系统*********************\n");

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

printf("* *\n");

again:

printf("* 请输入用户名: *");

scanf("%s",input_https://www.doczj.com/doc/a1531513.html,);

printf("* 请输入密码: *");

scanf("%s",input_user.ps);

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

fflush(stdin);

fp=fopen(DataFile,"ab");

if(fp==NULL)

{

printf("\nOpen file %s fail! 按任意键结束\n",DataFile);

perror("Open file fail");

getch();

exit(1);

}

if(strcmp(input_https://www.doczj.com/doc/a1531513.html,,"1")==0 && (strcmp(input_user.ps,"1")==0))//校验用户名

和密码,若用户名和密码分别为1,是管理员,并调用管理员界面

{

printf("\nlogin successful!");

success=1;

printf("\n\n\n\n\n\n\n 您是管理员!欢迎您登录系统!正在进入管理员界面...\n");

main_a();

}

else

{

if(strcmp(input_https://www.doczj.com/doc/a1531513.html,,temp_https://www.doczj.com/doc/a1531513.html,)==0&&(strcmp(input_u

ser.ps,temp_user.ps)==0))

{

printf("\nlogin successful!");

success=1;

printf("\n\n\n\n\n\n\n 您是投票者!欢迎您登录系统!正在进入投票者界面...");

main_v();

};

}

fclose(fp);

if(success==0)

{

fflush(stdin);

printf("\n用户名或密码错误!继续输入吗?是(Y)/否(N): ");

fflush(stdin);

relogin=getchar();

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

{

goto again;

}

else

{

printf("结束\n");

exit(0);

}

}

}

测控电路电子秤课设报告

《测控电路课程设计》报告题目人体电子秤设计 院系仪器科学与光电工程 专业测控技术与仪器 班级测控1102 学号 2011010652 学生姓名丁向友 指导老师刘国忠 实验时间 2014.06-2014.07 实验成绩

目录 一、课程设计目的及意义 (3) 二、系统设计的主要任务 (3) 三、总体方案设计 (3) 四、电路设计及调试 (4) 4.1称重传感器电路 (4) 4.2信号调理电路 (5) 4.2.1放大电路 (5) 4.2.2调零电路 (7) 4.3比较电路 (7) 4.4或非电路 (9) 4.5显示模块 (10) 4.6报警系统 (10) 五、电路调节 (10) 六、实验数据分析与处理 (11) 6.1准确性 (11) 6.2稳定性 (12) 6.3关键点电压 (13) 七、总结 (14) 八、参考文献 (14)

一、课程设计目的及意义 测控电路课程设计是测控电路课程体系的一个重要组成环节,独立实践教学环节是对《测控电路》理论部分的必要补充。 课程设计内容为典型测控系统电路设计,通过课程设计,使学生完成测控系统任务分析、电路总体设计、单元电路设计以及电路调试等各个环节。掌握有关传感器接口电路、信号处理电路、放大电路、滤波电路、运算电路、显示电路以及执行部件驱动电路等内容在测控系统中的使用方法。了解有关电子器件和集成电路的工作原理。 在课程设计中,做到理论联系实际,加深对理论知识的进一步理解,提高分析问题和解决问题的能力。本课程设计以AD620、LM741、LM339为核心,进行智能人体电子秤的设计,并详述该系统硬件的设计方法。该系统集称重、显示、报警于一体,功能齐全,实用性强,充分利用了电路分析、模拟电路、测控电路、信号分析与处理、传感器等课堂上学到的知识,有机的将所学到的知识融合在一起,投入到实际运用中,便于对知识的综合掌握及运用。 二、系统设计的主要任务 任务:设计一个人体电子秤测量系统。 要求: 1)基本要求 最大称重:150KG 用3位半数字显示表头显示体重,输入电压范围0-2V, 当体重大于W1时,点亮LED1,发出声音提示; 当体重小于W2时,点亮LED2,发出声音提示。 2)提高部分 提高线性度 可以设置W1和W2; 语音提示; 自由发挥 三、总体方案设计 本系统主要由称重传感器模块、滤波放大电路模块、调零模块、报警电路模块、LCD显示模块等部分组成。人体的体重信息由称重传感器转换成电信号,并通过测量电路进行滤波放大,通过显示电路进行显示,如体重超出设定范围系统还会报警。

c语言课程设计报告·图书管理系统

第一章 §题目描述 图书管理系统设计: 【要求】图书管理信息包括:图书名称、图书编号、单价、作者、存在状态、借书人姓名、性别、学号等。试设计一图书管理系统,使之能提供以下功能: (1)新图书基本信息的输入; (2)图书基本信息的查询; (3)对撤销图书信息的删除; (4)办理借书手续; (5)办理还书手续; 【提示】建立图书馆里信息结构体,结构体成员包括图书名称、图书编号、单价、作者、存在状态、借书人姓名、性别、学号。存在状态设为整型,可用不同数字代表借还状态。借书和还书手续要注意修改结构体的成员变量存在状态的值。 §算法设计 1.设计思想: 在整个系统编写的过程中,涉及了较多C语言知识点,对于不同的数据类型、程序控制结构、数据结构作以分析和总结,并结合这个课题进行综合的应用,在一定程度上做到了对所学知识融会贯通。由此进一步加深、巩固了所学的课程的基本理论知识,培养了综合分析问题、解决问题的能力。在设计程序时,参考了学校图书馆的图书管理系统,实现了程序的模块化、结构化。在主函数中调用各种函数,操作界面简单,易操作,人机互动性较强。 2.实现注释: 这个实用的小型图书管理系统程序以结构体数组指针操作完成,并实现文件信息的录入、修改和保存等功能,所有信息以磁盘文件方式保存,方便用户使用。本图书管理系统分为管理员和学生两个部分,其基本功能包括了对图书信息的存储、查询、添加、删除和借书、还书手续办理等。查询时可按书名、编号等方式查询,找到后输出这本书的所有信息。可查询图书的在库状态,方便用户进行借书、还书操作。在借书还书成功后图书的在库状态自动改变,并更新信息到数据库。系统中主要的数据结构就是图书名称、图书编号、单价、作者、存在状态、借书人姓名、性别、学号等。在处理过程中各项可以作为一本图书的不同属性来进行处理。 3.结构体系设计 图:主函数结构;图:新书信息录入流程;图:图书信息查询(管理员)流程;图:图书信息查询(学生)流程;图:图书信息删除流程;图:办理借书手续流程;图:办理还书手续流程; §程序设计及代码分析 1.程序设计: 下面,我大致介绍一下我的系统的主要功能和注意事项: 当运行此程序时,首先进入系统主界面,然后可以选择[1].管理员登陆(密码:123),[2].学生登陆,[0].退出系统; 选择[1]后进入管理员系统,验证密码成功后显示管理员功能菜单,按数字键选择所需服务。管理员功能菜单中,[1].新书信息录入,[2].图书信息查询,[3].图书信息删除,[4].返回主菜单,[0].退出系统;当出现“请选择”时,输入选项前的数字,输完之后按回车(下同)。首次运行系统需要先选择[1]录入库存书籍信息,图书各信息项须用空格键隔开,输入完毕后信息自动储存并更新至数据库,然后再选择其他操作。当选择[3]时会进入图书信息删除,在这里可以选择删除图书信息等操

C语言课程设计报告-游戏2048

东华理工大学C语言课程设计报告 学院:国际教育学院学院专业:电子信息工程 班级:1420606 学号:201420060638 姓名:钟天运

一、课程设计题目:游戏2048 二、课程设计要求: a)使用C语言编写2048这款游戏 b)能够正常运行,拥有游戏界面。 c)能正常进行游戏从开始到结束。 d)用户操作方便 三、设计思路: a)游戏介绍: i.2048是一款简单的数字类游戏,界面是一个 4*4的方形格子。每个格子里可以为空或者有 一个2^n的数值。 ii.用户可以输入4种指令,分别是:上下左右,游戏会根据用户的指定的方向,将格子中 的数值向对应方向进行移动,直至移动到最边 上的格子或者有其他数值占用,如果碰到等大 数值,将会进行合并。此外,成功移动后,会 在一个空格子随机生成一个2或者4 iii.游戏目标是合成2048这个数值或者更大的数值。 b)实现思路: i.可以使用二维数组来保存4*4格子中的数值 ii.指令,可以通过输入字符函数,读取用户

在键盘上的方向键,进行判断执行对应的代 码。 iii.游戏界面,可以使用简单的特殊制表符,来实现,并通过清屏函数来进行反复同位置打 印界面。 iv.需要判断游戏结束的函数,以及记录游戏分数和步骤的变量 v.当游戏结束时,能够询问用户是否重新开始。 vi.随机生成一个新数,可以调用随机函数,使用时间做种子。 c)实现难点: i.打印游戏界面,要实现灵活能根据棋盘数组里 面的数据灵活打印。 ii.执行操作时,数值的移动和合并。

四、流程图

五、C语言源代码 // 游戏2048.c #include "windows.h" #include "time.h" #include "stdio.h" #include "conio.h" #include "string.h" //宏定义常量方向键值 //const int LEFT = 75, UP = 72, RIGHT = 77, DOWN = 80; #define LEFT 75 #define UP 72 #define RIGHT 77 #define DOWN 80 const char error_str[] = "您上次输入的指令无法识别,请重新输入。"; struct board { int place[4][4]; long int stepn; long int num; //存储游戏分数 long int time; int dtk; //direction key 记录方向键,及操作方向 int over; int zeronum; }; //该函数为游戏运行函数,当只是玩游戏的时候。进入该函数,游戏控制函数。int main() { //place数组为棋盘,其中为零代表空,-1代表不能合并的牌,其他2的倍数值为本身含义,初始化为全0。 struct board board1, board_backup; int newgame(struct board *, int), show(struct board *), operate(struct board *); char str[100] = "首次运行游戏"; //用于记录系统返回给用户的信息,例如:上一步执行向左合并,按键有误等 newgame(&board1, 0); //调用函数为新局初始化,第二个

基于霍尔式传感器的电子秤-课程设计

基于霍尔式传感器的电子秤-课程设计

————————————————————————————————作者:————————————————————————————————日期:

课程设计报告 设计题目基于霍尔式传感器的电子秤 指导老师 摘要 科学技术的发展对称重技术提出了更高的要求,尤其是微处理技术和传感技术的巨大进步,大大加速了这个进程。目前,电子秤在商业销售中的使用已相当普遍,但在市场上仍广泛使用的电子秤有很大局限性。这些电子秤体积大、成本高,又不便随身携带,而目前市场上流行的便携秤又大都采用杆式秤或以弹簧压缩、拉伸变形来实现计量的弹簧秤等,其计量误差大,又容易损坏。杆式秤和弹簧秤等计量器械将逐渐被淘汰。因此,一种能够在未来更方便、更准确的普及型电子秤的发展受到人们的重视,设计一种重量轻、计量准确、读数直观的民用电子秤迫在眉睫。 本设计过程充分利用传感器的有关知识,利用霍尔传感器设计的简单电子秤很大程度上满足了此应用需求,并从简单电子秤的基本构造进一步了解大型电子秤的构造原理。 关键词:CSY传感器实验仪;电子秤;霍尔式传感器;差动放大器

目录 第一章绪论 (1) 1.1 电子秤概述 (1) 1.1.1 电子秤的发展 (1) 1.2 电子秤的组成 (2) 1.2.1 电子秤的基本结构 (2) 1.2.2 电子秤的基本工作原理 (2) 第二章电子秤设计的目的意义及设计任务与要求 (4) 2.1 电子秤设计目的 (4) 2.2 此课程在教学计划中的地位和作用 (4) 2.3 电子秤设计任务与要求 (4) 2.3.1 设计任务 (4) 2.3.2 设计要求 (4) 第三章电子秤总体设计方案 (5) 3.1 电子秤设计思想 (5) 3.2各电路单元或部件选择 (6) 3.2.1 直流稳压电源的选择 (6) 3.2.2 电桥平衡网络的选择 (6) 3.2.3 称重传感器的选择 (6) 3.2.4 差动放大器的选择 (9) 3.2.5 F/V表的选择 (9) 3.3 最终方案的确定 (10) 第四章硬件设计 (11) 4.1 硬件设计概要 (11) 4.1.1 硬件电路设计原理说明及电路图 (11)

数字电子秤数字电路课程设计说明书

数字电路课程设计说明书 题目:数字电子秤 学生姓名:李思标 学号: 8080514215 院(系):职业技术学院 专业:机械设计制造及其自动化 指导教师:郭文强 2010 年 7 月 2日

目录 第一节绪论 (3) 1.1本设计的任务和主要内容 (3) 1.2基本工作原理及原理框图………………………………… 第二节硬件电路的设计 (4) 2.1 电阻应变式传感器的选择 (4) 2.2 三运放大电路的设计 (6) 2.3 集成A/D转换器CC7106 (7) 2.4 LED显示电路的设计 (9) 2.5 总体工作电路原理图 (10) 第三节电路元件列表 (11) 第四节设计总结 (12)

数字电子秤设计 第一节绪论 本课程设计的电子秤以单片机为主要部件,利用全桥测量原理,通过对电路输出电压和标准重量的线性关系,建立具体的数学模型,将电压量纲(V)改为重量纲(g)即成为一台原始电子秤。其中测量电路中最主要的元器件就是电阻应变式传感器。电阻应变式传感器是传感器中应用最多的一种,本设计采用全桥测量电路,使系统产生的误差更小,输出的数据更精确。而三运放大电路的作用就是把传感器输出的微弱的模拟信号进行一定倍数的放大,以满足A/D转换器对输入信号电平的要求。CC7106 A/D转换的作用是把模拟信号转变成数字信号,进行模数转换,然后把数字信号输送到显示电路中去,最后由显示电路显示出测量结果。 1.1本设计的任务和主要内容 设计任务:设计一数字电子秤,其技术要求如下: 1)测量范围:0-1.999kg; 0-19.99kg; 0-199.9kg; 0-1999kg。 2)用数字显示被测重量,小数点位置对应不同量程显示。 3)具有自动切换量程功能。 1.2设计思路及原理框图 1.设计思路 1)用电子称称重的过程是把被测物体的重量通过传感器转换成电压信号。由于这一信号通常都非常小,需要进行放大,放大后的模拟信号经模/数变换转变成数字量,再通过译码显示器显示出重量。由于被测物体的重量相差很大,根据不同的测量范围要求,可由电路自由切换量程,同时,显示器的小数点数位对应不同量程而变化,即可实现电子称的要求。 2)称重的准确程度首先取决于传感器输出的信号,电子称的传感器通常使用电桥,它将应变电阻转变成电压信号或电流信号。 基本工作原理框图如下:

c语言课程设计报告书--学生成绩管理

C 语言程序设计报告 课题:学生成绩管理 时间:

一、需求分析 任务要求: 自学C语言中有关链表及外部文件的内容,设计出学生成绩管理。具体要求如下: 1.主要功能: (1)能按学期、按班级完成对学生成绩的录入、修改 (2)能按班级统计学生的成绩,求学生的总分及平均分,并能根据学生的平均成绩进行排序 (3)能查询学生成绩,不及格科目及学生名单 (4)能按班级输出学生的成绩单 系统功能需求分析: 1、定义一个结构体类型,成员包括学期、班级、各科成绩、建立链表,定义该结构体类型的指针,用于指向各结点; 2、分别建立具有添输入、修改、查询、总分及平均分、排序等功能的子函数,完成相应功能,对程序实现模块化。 二、概要设计 系统总体设计框架: 对程序进行模块化,建立输入、修改、查询、查找和显示功能的子函数,各子函数中运用链表存储数据。 系统功能模块图:

三、详细设计 主要功能模块的算法设计思路如下: 1、输入信息函数 (1)定义指向结构体变量的指针; (2)移动指针,找到插入结点; (3)在要插入的结点输入信息; (4)返回头指针。 2、修改信息 (1)定义指向结构体变量的指针; (2)用指针检验链表中是否有记录,若没记录,出现报错,然后要求重新输入; (3)根据要修改的编号查找对应结点; (4)修改信息;

(5)修改成功。 3、排序函数 (1)定义所要排序的班级和链表的头指针为形参; (2)调用排序函数,把班级和链表的头指针赋给形参; (3)在子函数中进行排序; (4)输出排序结果。 4、显示学生成绩信息(void Disp(Link l)) (1)选择想要查询的项目(学生各科成绩、不及格科目、班级成员);(2)用指针检验是否有记录; (3)若无记录,输出提示信息,返回主函数; 若有记录,移动指针,依次输出记录; 5、查询班级成绩信息(void Find(Link l)) (1)选择所要查询的班级; (2)输入班级: (3)在链表中寻找相应结点; (4)输出结点信息。 以上各个函数的流程图如下:

c语言课程设计报告学生成绩信息管理系统源代码

实验报告 一、问题陈述及其需求分析 (一)问题陈述 学生信息管理系统是对学生信息的基本管理,其中包括以下及模块: (1)增加一个学生的信息(需输入要增加学生的所有信息); (2)统计本班学生总人数及男女生人数。 (3)分别按照学号查找学生的信息;若找到则输出该学生全部信息,否则输出查找不到的提示信息。 (4)按学号对所有学生信息排序,并输出结果; (5)删除一个学生的信息(需指定要删除学生的学号);同时显示删除后的结果。( 二) 功能需求分析 学生信息管理系统设计 学生信息包括:学号,姓名,性别,出生年月,电话 使之提供以下功能: 1、系统以菜单方式工作 2、建立链表并显示 3、插入新的学生信息 4、删除某学号的学生信息 5、查找某学号的学生信息 6、对学生信息排序 7、统计学生人数 8、输出学生信息 二总体设计 (一)模块 依据程序的数据结构,描述该程序的层次结构,如下图:

1、建立链表并显示 void createlist(struct stucode **r); 2、插入新的学生信息 void insert(struct stucode **r); 3、删除某学号的学生信息 void del(struct stucode **r); 4、查找某学号的学生信息 void search1(struct stucode *r); 5、对学生信息排序 void sort(struct stucode **r); 6、统计学生人数 void search2(struct stucode *r); 7、输出学生信息 void out(struct stucode *r); 1 建立链表并显示 2 添加学生信息 3 删除学生信息 息 4 按学号查找学生信 5 对学生信息排序 6统计学生人数 7输出学员信息 8 学生信息写入文件 0退出 main() 菜单函数

数字电子称的设计(完美版)

沈阳航空航天大学 课程设计 (说明书) 数字电子称的设计 班级 学号 学生姓名 指导教师胡乃瑞

沈阳航空航天大学 课程设计任务书 课程名称电子技术综合课程设计 课程设计题目数字电子称的设计 课程设计的内容及要求: 一、设计说明与技术指标 设计一个一个具有数字显示功能的数字电子称,具体技术要求如下: (1)测量范围0~0.99kg(0~0.99V)1~1.99kg(1~1.99V)。 (2)用3 位数码管显示测量结果。 (3)直流电源输出的微弱信号作为该系统的输入信号。 (4)发挥部分:设计测量量程,进一步扩大测量量程和减小测量误差。 二、设计要求 1.在选择器件时,应考虑成本。 2.根据技术指标,通过分析计算确定电路和元器件参数。 3.画出电路原理图(元器件标准化,电路图规范化)。 三、实验要求 1.根据技术指标制定实验方案;验证所设计的电路,用multisim软件仿真。 2.进行实验数据处理和分析。 四、推荐参考资料 1. 童诗白,华成英主编.模拟电子技术基础.[M]北京:高等教育出版社,2006年 五、按照要求撰写课程设计报告

成绩评定表: 指导教师签字: 年月日

一.概述 电子秤是日常生活中常用的电子衡器,广泛应用于超市、大中型商场、物流配送中心。电子秤在结构和原理上取代了以杠杆平衡为原理的传统机械式称量工具。相比传统的机械式称量工具,电子秤具有称量精度高、装机体积小、应用范围广、易于操作使用等优点,在外形布局、工作原理、结构和材料上都是全新的计量衡器。目前市场上使用的称量工具,或者是结构复杂,或者运行不可靠,且成本高,精度稳定性不好,调整时间长,易损坏,维修困难,装机容量大,能源消耗大,生产成本高。而且目前市场上电子秤产品的整体水平不高,部分小型企业产品质量差且技术力量薄弱,设备不全,缺乏产品的开发能力,产品质量在低水平徘徊。因此,有针对性地开发出一套有实用价值的电子秤系统,从技术上克服上述诸多缺点,改善电子秤系统在应用中的不足之处,具有现实意义。 从20世纪70年代开始,在世界范围内掀起了一股“电子秤热”,各先进工业国都很重视传感技术和电子秤的研究、开发和生产。传感技术已经成为重要的现代科技领域,电子秤及其系统生产已经成为了重要的新兴行业。我国生产的电子秤产品主要是属于静态衡器电子秤,在计量要求、功能和外形上已经达到了国外同类产品的先进水平,而且在价格上又低于国外的同类产品,具有较好的出口潜力;但动态衡器电子秤,与国外的同类产品还有一定的差距,尤其是在动态稳定性上存在较大的距离,我国进口的电子秤大多数就是这类产品。我国的电子衡量器要想打入国际市场,参与国际竞争。这就要求企业必须以技术为先导、以质量为中心、以管理为基础,努力提高制造技术与制造工艺水平,稳定产品

基于AT89C51的数字电子秤的设计_课程设计报告

综合课程设计报告 基于AT89C51的数字电子秤的设计

目录 1、设计目的 (2) 2、设计的主要内容和要求 (2) 3、整体设计方案 (2) 3.1设计方案 (2) 3.2工作原理 (2) 4、硬件电路的设计 (3) 5、软件设计 (5) 5.1主程序设计 (5) 5.2 LM4229液晶显示 (5) 5.3 ADC0832采样程序 (7) 5.4 4*4键盘程序 (8) 6、系统仿真 (8) 7、使用说明 (12) 8、设计总结 (13) 9、元器件 (13) 10、参考文献 (13) 附录A (14) 附录B (23)

基于AT89C51的数字电子秤的设计 1、设计目的 单片机以其功能强,体积小,功耗低,易开发等很多优势被广泛应用。但单片机不是万能的,也存在不适合的场合,我们要充分利用单片机的内部资源和选择合适的单片机来完成我们的设计。本数字电子秤的设计过程中需要用到A/D转换、键盘、液晶显示、复位电路和蜂鸣器报警驱动电路的知识,同时在软件的设计过程中需要用到键盘扫描、液晶显示驱动、模数转换程序及汉字库的的设计,可以很好的将数电、模电、单片机知识进行综合应用。在综合应用中进一步熟悉单片机设计的开发各个流程,最终达到"巩固基础、注重设计、培养技能、追求创新、走向实用"的目的。 2、设计的主要内容和要求 本文主要完成一个简单实用数字电子秤的硬件电路部分和软件部分的设计。在设计的过程学会使用单片机对数字电子秤的各种功能进行控制。本设计中的数字电子秤要求能够显示商品的名称、价格、总量、总价等;能够自动完成商品的价格计算;能够储存几种简单商品的价格;能够具有超重提醒功能,一旦重量超出了自身重量的测量的范围,发出警报;同时对数字电子秤的测量范围要达到5KG,测量精度要求达到0.001。 3、整体设计方案 3.1设计方案 整个数字电子秤电路由电源电路、单片机主控制电路、LM4229显示电路、蜂鸣器报警电路、4*4键盘电路和压力传感电路(ADC0832采样)6个部分组成。如图3.1所示。 3.2工作原理 打开电源开关,数字电子秤开始工作。接通电源时,数字电子秤进入欢迎界面“欢迎使用电子秤设计······”。此时数字电子秤上MCU开始工作,键盘不断进行扫描,同时通过ADC0832也不断进行外部称量数据采样,LCD上显示“实用电子秤名称单价······”。当载物台上放有物体时,ADC0832立即将数据收集送给单片机处理。此时工作人员只要输入对应商品的代码编号,在240*128的LCD上可以看到相应商品的名称,单价,总重,总价格等信息。在称量的过程中,一旦物体自身的重量超出电子秤的称量范围,蜂鸣器立即会发出“滴

c语言课程设计报告书

课程设计报告书 所属课程:c语言 项目:库函数模拟系统 指导老师:邹姝稚 班级:软件1401 姓名:江闯 学号:141403107 分数:

1.任务描述: 本系统开发的代码模拟了下列库函数的功能: (1).模拟gets和puts的功能:能接收一个字符串,将其写入ASCII文件,并且可以读出显示。 (2).在不使用字符串库函数的条件下,编程实现字符串的拷贝,连接,求长,倒置功能。 (3).字符串加密功能:将一段明文建立到一个ASCII文件中,按加密的算法加密后写入密文文件,最终实现将明文和密文文件都显示出来。 (4).编程实现字符串与对应数字的相互转换功能。 2.总体设计: 模块调用图: 图1

函数调用图: 图2 函数功能: (1)函数gp( ):模拟gets和puts的功能 (2)函数kaobei( ):实现字符串的拷贝 (3)函数lianjie( ):实现字符串的连接 (4)函数qiuchang( ):实现字符串的求长 (5)函数daozhi( ):实现字符串的倒置 (6)函数jiami( ):实现字符串的加密功能,最后将明文和密文文件都显示出来 (7)函数zhuanhuan1( ):将数字字符串转换为对应的数字 (8)函数zhuanhuan2( ):将数字转换为对应的数字字符串 3.详细设计: (1).模仿gets和puts功能: gets和puts功能与scanf和printf函数的功能相似,但是也不是完全相同,本系统模拟功能的程序总共运用了两次函数调用技术,模拟gets运用了一次,模拟puts运用了一次。 (2)..字符串的拷贝功能: 字符串的拷贝功能程序设计源于strcpy的功能,其中运用了字符串数组和指针的相关技术,还运用了一组while语句,实现语句的循环,从而将一个字符串拷贝到一个空数组中。

c语言课程设计报告

C语言程序设计B 课程设计报告 设计题目:学生成绩管理系统年级班级: 学号: 姓名: 指导教师: 2020 年 6 月 18 日

目录 一、设计目的 (3) 二、课程设计内容和要求 (4) 三、总体设计 (5) 四、主要步骤 (12) 五、功能实现 (13) 六、功能测试 (64) 七、评价程序 (83) 八、课程设计体会 (84)

一、设计目的 程序设计能力是当代理工类大学生的必备能力,当学生学习了C语言之后,编程能力远远不能达到开发实际应用程序的要求,特备是对其中的指针、结构体、链表和文件部分的理解和应用都比较弱。 程序设计的目的是通过对面向过程的学习,将C语言的主要知识点进行综合,针对提高学生C语言程序设计能力,强化编写较大的应用软件能力,熟练运用已掌握的知识解决实际需要解决的问题,以达到更加熟知指针、链表、结构体、文件读取、标准库的使用。 主要目的为以下几点: 1、熟练掌握面向过程(结构化)程序设计基本知识; 2、综合运用所学知识解决实际问题; 3、受到面向过程(结构化)程序设计的基本训练; 4、体会面向过程(结构化)开发程序的过程。

二、课程设计内容和要求 1.课程设计内容: 学生通过使用C语言进行编写算法,开发学生成绩管理系统,以实现对学生成绩的管理。 2.课程设计要求 1)具有菜单,可以在菜单上进行选择; 2)能实现学生数据录入、修改、删除、查询; 3)能实现数据排序; 4)有数据输出功能; 5)有数据读取与存储功能; 6)一个学生的数据(称为:每条记录)包含姓名、学号、语文、数 学、英语、总分、名次等信息; 7)以结构方式存储每条记录; 8)多条记录以链表方式存储到内存; 9)随时可将全部数据存储到磁盘文件中,方便下次从磁盘读取数据。

电子秤课程设计实验报告

电 子 设 计 实 验 报 告 电子科技大学 设计题目:电子称姓名:

学生姓名 任务与要求 一、任务 使用电阻应变片称重传感器,实现电子秤。用砝码作称重比对。 二、要求 准确、稳定称重; 称重传感器的非线性校正,提高称重精度; 实现“去皮”、计价功能; 具备“休眠”与“唤醒”功能,以降低功耗。

电子秤 第一节绪论 摘要:随着科技的进步,在日常生活以及工业运用上,对电子秤的要求越来越高。常规的测试仪器仪表和控制装置被更先进的智能仪器所取代,使得传统的电子测量仪器在远离、功能、精度及自动化水平定方面发生了巨大变化,并相应的出现了各种各样的智能仪器控制系统,使得科学实验和应用工程的自动化程度得以显著提高。影响其精度的因素主要有:机械结构、传感器和数显仪表。在机械结构方面,因材料结构强度和刚度的限制,会使力的传递出现误差,而传感器输出特性存在非线性,加上信号放大、模数转换等环节存在的非线性,使得整个系统的非线性误差变得不容忽视。因此,在高精度的称重场合,迫切需要电子秤能自动校正系统的非线性。此外,为了保证准确、稳定地显示,要求所采用的ADC具有足够的转换位数,而采用高精度的ADC,自然增加了系统的成本。基于电子秤的现状,本文提出了一种简单实用并且精度高的智能电子秤设计方案。通过运用很好的集成电路,使测量精度得到了大大提高,由于采用数字滤波技术,使稳态测量的稳定性和动态测量的跟随性都相当好。并取得了令人满意的效果。 关键词:压力传感器,AD620N放大电路,ADC模数转换,STM32单片机,OLED 显示屏,矩阵键盘,电子秤。 1.1引言 本课程设计的电子秤以单片机为主要部件,利用全桥测量原理,通过对电路输出电压和标准重量的线性关系,建立具体的数学模型,将电压量纲(V)改为重量纲(g)即成为一台原始电子秤。其中测量电路中最主要的元器件就是电阻应变式传感器。电阻应变式传感器是传感器中应用最多的一种,本设计采用全桥测量电路,是系统产生的误差更小。输出的数据更精确。而AD620N放大电路的作用就是把传感器输出的微弱的模拟信号进行一定倍数的放大,以满足A/D 转换器对输入信号电平的要求。A/D转换的作用是把模拟信号转变成数字信号,进行模拟量转数字量转换,然后把数字信号输送到显示电路中去,最后由OLED

C语言课程设计图书管理系统课程设计报告

C语言课程设计 图书管理系统 Books Management System 学生姓名张朝柱 学院名称徐州工程学院学号140 班级13计转本 专业名称计算机科学与技术 指导教师李子龙 2016年5月10日

一、需求分析 为了满足图书管理的要求,通过计算机技术给图书管理人员和读者借、还书带来便利。使用c语言编写了图书管理系统。本系统主要实现图书信息管理的功能,通过此系统可对图书馆库存图书信息进行管理和维护操作。实现了图书馆内管理的一般功能,包括查询、借书、还书、添加、删除、修改图书信息等。所设计的系统以菜单方式工作,为用户提供清晰的使用提示,依据用户的选择来进行各种处理,并且在此过程中能够尽可能的兼容用户使用过程中可能出现的异常情况。图书信息包括编号、书名、作者、数量、在库状态等。图书信息的录入和显示要求有一定的规范格式,录入的图书信息用文件形式保存,并可以对其进行浏览、查询、借阅、还书等基本操作。整个程序实现顺序表操作,对图书信息的操作逐个地进行,一个图书信息的更改不应影响其他的图书记录。 二、算法设计: 1.设计思想: 整个系统制造的而过程中,涉及了较多C语言知识点,对于不同的数据类型、程序控制结构、数据结构作以分析和总结,并结合这个课题进行综合的应用,在一定程度上做到了对所学知识融会贯通。进一步加深、巩固了所学的专业的基本理论知识,培养了综合分析问题、解决问题的能力。在设计程序时,实现了程序的模块化、结构化。在主函数中调用各种子函数,操作界面简单,易操作。 2,设计表示: (1)、整个系统除了主函数外,另外还有各种功能子函数,利用无限次循环语句while()和选择语句swithch()实现各个子函数的调用,系统根据输入的数字选项来调用相应的函数,以实现相应的功能。主要实现了图书的录入、存储、查询、借书、还书、显示库存等功能。 (2)、void Book_Entering(struct SqList &SL);这是一个录入图书信息的函数,它主要实现了顺序表的创建,并且在创建过程中从文件读取信息到顺序表中,以用于后面其他函数的操作。它引用了一个顺序表SL。其他函数调用时只需传入顺序表头即可。 (3)、int main(void);这五个函数时整个图书管理系统的全部菜单函数,Book_Entering();为系统主界面,进入时可选择进入程序和退出程序。menu1();为进入程序时显示的功能菜单,在此菜单可以选择录入、保存图书信息,也可选择进入其他子系统。Book_Inquire();此菜单为进入图书管理系统的菜单,在此可以选择添加、删除、修改图书等操作。cxmenu();为查询系统的菜单,在此可以选择按书名、编号、作者等方式进行查询图书。jhmenu();为借书还书的子菜单,在此可以选择借书还书操作。操作完成后按提示信息进行文件的保存操作。 (4)、void Book_Inquire(struct SqList &SL);这个函数为顺序表的输出函数,把顺序表的头传给函数后,可输出整个顺序表的所有信息。、

C语言课程设计报告-模板

C语言课程设计报告 班级:16 物联网 一、题目说明 (1)读取输入信息,能正确进行数字运算

(2)拥有记忆功能,可查询最近几次计算结果并继续进行数字运算。 二、基本功能实现 (1)能实现两个数之间的加减,乘,除,乘方,开方等运算。 (2)实现记忆功能,可保留近十位结果,可用#键查看。(3)*键作为清0键,清除当前屏幕上的值为0表示重新开三、设计流程(可以画流程图,可以直接写说明)

四、代码 #include #include #include #include double yunsuan(double a, char operate, double b); //处理数值之间的运算void PutRes(double array[], double res, int *i); //保存该次运算结果 int main() { char str[40]; double a = 0; double b = 0; double res = 0; double history[10] = {0,0,0}; char opt; int i = 0; printf("欢迎进入计算功能(eg: 1 \n+ 1 ; '#':查询历史结果; 'q':退出程序)·\n"); while(1){

fgets(str,40,stdin); //将从键盘的一整行标准输入保存在字符串str中 if(sscanf(str,"%lf", &a) == 1){ //将str以长浮点型的格式放入a中,如果返回值为1,说明输入的是数值, scanf("%c %lf", &opt, &b); //获取操作符的值和另外一个操作数的值 res = yunsuan(a,opt,b); //调用yunsuan()函数计算,并将结果给res printf("%lf %c %lf = %lf\n\n",a, opt, b, res); PutRes(history, res, &i); //调用函数PutRes()将本次结果保存到数组history中(i用引用传递) // printf("%d\n", i); }else if(sscanf(str,"%c",&opt) == 1){ //将str以字符型的格式放入opt中,如果返回值为1,说明输入的是字符 if(opt == '#'){ //如果opt为‘#’,则显示history 中的数值 int j = 0; for(j = 0; j < i; ++j){ //i为history中存放的数值个数 printf(" %lf ", history[j]); } printf("\n");

电子秤课程设计

【设计题目】:基于单片机的电子秤设计 【设计要求】: (1)设计一款电子秤,用LCD液晶显示器显示被称物体的质量(2)可以设定该秤所称的上限 (3)当物体超重时,能自动报警 【设计过程】 1.【方案设计】 1.1电子秤的组成 1.1.1电子秤的基本结构 电子秤是利用物体的重力作用来确定物体质量(重量)的测量仪器,也可用来确定与质量相关的其它量大小、参数、或特性。不管根据什么原理制成的电了秤均由以下三部分组成: (1)承重、传力复位系统 它是被称物体与转换元件之间的机械、传力复位系统,又称电子秤的秤体,一般包括接受被称物体载荷的承载器、秤桥结构、吊挂连接部件和限位减振机构等。 (2) 称重传感器 即由非电量(质量或重量)转换成电量的转换元件,它是把支承力变换成电的或其它形式的适合于计量求值的信号所用的一种辅助手段。 (3) 测量显示和数据输出的载荷测量装置 即处理称重传感器信号的电子线路(包括放人器、模数转换、电流源或电

压源、调节器、补尝元件、保护线路等)和指示部件(如显示、打印、数据传输和存贮器件等)。 1.1.2电子秤的工作原理 当被称物体放置在秤体的秤台上时,其重量便通过秤体传递到称重传感器,传感器随之产生力一电效应,将物体的重量转换成与被称物体重量成一定函数关系(一般成正比关系)的电信号(电压或电流等)。此信号由放大电路进行放大、经滤波后再由模/数( A/D)器进行转换,数字信号再送到微处器的CPU处理,CPU不断扫描键盘和各功能开关,根据键盘输入容和各种功能开关的状态进行必要的判断、分析、由仪表的软件来控制各种运算。运算结果送到存贮器,需要显示时,CPU发出指令,从存贮器中读出送到显示器显示,或送打印机打印。 1.2本设计思路 本设计的主要思路是:利用压力传感器采集因压力变化产生的电压信号,经过电压放大电路放大,然后再经过模数转换器转换为数字信号,最后把数字信号送入单片机。单片机经过相应的处理后,得出当前所称物品的重量,然后显示出来。主要技术指标为:称量围0~600g,分度值1kg,精度等级III级,电源AC220V。 2.【器件选择】 按照本设计功能的要求,系统由5个部分组成:控制器部分、测量部分、数据显示部分、键盘部分、语音提示部分和电路电源部分,系统设计总体方案框图如图1所示。

c语言语言课程设计报告

上海应用技术学院 课程设计 2011~ 2012学年第二学期 设计题目成绩记录簿 院(系)计算机科学与信息工程学院 专业计算机应用技术 班级 11104114 学号 1110411414 学生姓名蒋佳琴 设计时间 2012.06.25 -2012.07.06 指导教师马智娴 提交日期 2012.07.06

上海应用技术学院课程设计任务书 指导教师(签名):马智娴教研室主任(签名):马智娴2012年6 月25日2012年6月25日

目录 1 设计目的 (5) 2 功能描述 (5) 2.1模块功能 (5) 2.2流程图 (6) 3 总体设计 (13) 3.1 功能模块设计 (13) 3.2 数据结构设计 (13) 3.3 函数功能描述 (13) 4 程序实现 (14) 4.2 运行结果 (25) 5课程设计总结 (28)

成绩记录簿 1. 设计要求: 基本功能 a) 添加成绩 b) 删除成绩 c) 查询学生成绩 d) 查询班级成绩 e) 退出 拓展功能 a) 写入文件 b) 读取文件 创新(自拟)功能: 程序实现的其它功能由个人自拟。 2. 设计要求具体说明 基本功能: 成绩记录簿中记录以下数据: 学号、姓名、课程编号、课程名称、成绩、学分,所有成绩都以百分制计分; 输入信息时要检查数据项学号、课程编号、成绩、学分的合法性,学号:8位数字;课程编号:5位数字;成绩:0 ~ 100 之间的整数,学分: 1~ 5之间的实型数。 添加成绩:需要输入学生的学号或姓名、课程编号及成绩,如已有该门课程成绩给出提示; 查询(班级或个人)成绩: a) 查询个人成绩:以学号或姓名作为关键字,可查询一个学生的所有成绩,和已完成 的总学分。 b) 查询班级成绩:以课程编号为关键字,成绩表后面要统计平均分、及格率及全班同 学不同课程在不同分数段分布的人数及百分比。 拓展功能: a) 程序启动时先从文件读入数据,如果文件中没有数据则给出提示; b) 每次修改的数据写入文件。 3. 提示 定义合适的结构体类型,使用链表或数组的方式组织数据。

数字电子秤课程设计

数字电子秤 摘要:随着微电子技术的应用,市场上使用的传统称重工具已经满足不了人们的要求。为了改变传统称重工具在使用上存在的问题,在本设计中将智能化、自动化、人性化用在了电子秤重的控制系统中。本系统主要由单片机来控制,测量物体重量部分由称重传感器及A/D转换器组成,加上显示单元,此电子秤俱备了功能多、性能价格比高、功耗低、系统设计简单、使用方便直观、速度快、测量准确、自动化程度高等特点。本系统以AT89S52单片机为主控芯片,外围附以称重电路、显示电路、报警电路、键盘电路等构成智能称重系统电路板,从而实现自动称重系统的各种控制功能。可以说,此设计所完成的电子秤在很大程度上满足了应用需求。 关键词:AT89S52,称重传感器,A/D转换器,LED显示器 Abstract:With the application of micro-electronics technology, tradition ponderation instrument used in market has been not satisfaction with hunman requirements already. In order to make up for the traditional apparatus shortcoming, we improve the apparatus's control system with intelligence and automation. This system is mainly controlled by microcontroller, the section of height measurement accomplish by supersonic sensor, the section of weight measurement accomplish by weight sensor and A/D transformer, this apparatus have many characteristic such as having more function, consume less energy, small and move easily, low price, measure precisely, the speed is quick, automatic work without people and so on.The system is mainly controlled by the microcontroller AT89S52, the periphery is consist of the circuit of clock and calendar, the circuit of measure height and weight, the circuit of display and print, all of these comprise the circuit board of the intelligent apparatus of height and weight. It can achieve all function of the apparatus. Keywords: AT89S52,ponderation –sensor,A / D converter,LEDDisplay

单片机课程设计报告 基于单片机的电子秤设计

基于单片机的电子秤设计 一、【设计题目】 基于单片机的电子秤设计 二、【设计要求】 设计要求如下: (1)设计一款电子秤,用LCD液晶显示器显示被称物体的质量 (2)可以设定该秤所称的上限 (3)当物体超重时,能自动报警。 三、【设计过程】 1.【方案设计】 微控制器技术、传感器技术的发展和计算机技术的广泛应用,电子产品的更新速度达到了日新月异的地步。本系统在设计过程中,除了能实现系统的基本功能外,还增加了打印和通讯功能,可以实现和其他机器或设备(包括上位PC机和数据存储设备)交换数据.除此之外,系统的微控制器部分选择了兼容性比较好的AT89系列单片机,在系统更新换代的时候,只需要增加很少的硬件电路,甚至仅仅删改系统控制程序就能够实现。 另外由于实际应用当中,称可以有一定量的过载,但不能超出要求的范围,为此本设计提供了过载提示和声光报警功能。 综上所述,本课题的主要设计方案是:利用压力传感器采集因压力变化产生的电压信号,经过电压放大电路放大,然后再经过模数转换器转换为数字信号,最后把数字信号送入单片机。单片机经过相应的处理后,得出当前所称物品的重量及总额,然后再显示出来。此外,还可通过键盘设定所称物品的价格。主要技术指标为:称量范围0~5kg;分度值0.01kg;精度等级Ⅲ级;电源DC1.5V(一节5号电池供电)。其设计框图如图3.1所示。 这种高精度智能电子秤体积小、计量准确、携带方便,集质量称量功能与价格计算功能于一体,能够满足商业贸易和居民家庭的使用需求。

图3.1 系统设计框图 2.【器件选择】 2.1单片机选择 本设计由于要求必须使用单片机作为系统的主控制器,而且以单片机为主控制器的设计,可以容易地将计算机技术和测量控制技术结合在一起,组成新型的只需要改变软件程序就可以更新换代的“智能化测量控制系统”。考虑到本设计中程序部分比较大,根据总体方案设计的分析,设计这样一个简单的的系统,可以选用带EPROM 的单片机,由于应用程序不大,应用程序直接存储在片内,不用在外部扩展存储器,这样电路也可简化。INTEL 公司的8051和8751都可使用,在这里选用ATMENL 生产的AT89SXX 系列单片机。AT89SXX 系列与MCS-51相比有两大优势:第一,片内存储器采用闪速存储器,使程序写入更加方便;第二,提供了更小尺寸的芯片,使整个硬件电路体积更小[1]。此外价格低廉、性能比较稳定的MCPU ,具有8K×8ROM 、256×8RAM 、2个16位定时计数器、4个8位I/O 接口。这些配置能够很好地实现本仪器的测量和控制要求 最后我们选择了AT89S52这个比较常用的单片机来实现系统的功能要求。AT89S52内部带有8KB 的程序存储器,基本上已经能够满足我们的需要。 2.2压力传感器的选择 在本设计中,传感器是个十分重要的元件,因此对传感器的选择也显得十分重要。不仅要注意其量程和参数,还要考虑与其相配置的各种电路的设计的难易程度键盘设定 阀值报警 LCD 显示器 AT89S52单片机 压力传感器 放大电路 A/D 转换器

相关主题
文本预览
相关文档 最新文档