虫虫首页| 资源下载| 资源专辑| 精品软件
登录| 注册

l.

  • 实用万用电表检修

    技术维修l类资料。技术维修l类资料技术维修l类资料技术维修l类资料技术维修l类资料

    标签: 万用电表 检修

    上传时间: 2018-10-28

    上传用户:喜洋洋2018

  • 《算法设计与分析》实验指导书

    设有n=2k个运动员要进行网球循环赛。现要设计一个满足以下要求的比赛日程表:⑴每个选手必须与其他n-1个选手各赛一次;⑵每个选手一天只能赛一次;⑶循环赛一共进行n-1天。按此要求可将比赛日程表设计-成有n行和n-l列的一个表。在表中第i行和第j列处填入第i个选手在第j天所遇到的选手。用分治法编写为该循环赛设计一张比赛日程表的算法并运行实现、对复杂度进行分析。

    标签: 算法 实验指导书 设计与分析

    上传时间: 2019-06-04

    上传用户:594551562

  • 成绩查询系统

    #include<stdio.h> #include<string.h> #include<stdlib.h> #define N 100 int iNumOfStu=0; struct score   {   float math;   float english;   float computer;   }; struct student   {   int number;   char name[20];   struct score sco;   float average;   }; struct student stu[N]; void print_menu(void);//输出菜单 void choosemenu(void);//菜单选择 void input_student1(int);//输入学生信息 void input_student2(void);//输入总函数 void input_student3(int &,int);//判断学号是否重复 void input_student4(int,int);//覆盖原信息 void sort_student3(student s[],int);//按照英语成绩排序 void sort_student4(student s[],int);//按照计算机成绩排序 void sort_student2(student s[],int);//按照数学成绩排序 void sort_student5(student s[],int);//按照平均成绩排序 float input_score2(int);//计算学生平均成绩 void print_student2(void);//显示表头 void print_student3(int);//显示学生信息 void print_student1(int);//显示全部学生资料 void sort_student1(void);//排序总函数 void menu(void);//菜单调度总函数 int search_student2(int);//按学号查询学生信息并输出 void search_student3(int);//按平均分最高查询并输出 void search_student1(void);//查询总函数 void delete_student2(int,int);//删除学生信息 void delete_student1(void);//删除总函数 void change_student2(int);//修改学生资料 void change_student1(void);//修改总函数 void input_score3(int);//统计成绩 void input_score1(void);//统计成绩总函数 void print_help(void);//输出帮助信息 void exit_student(void);//退出系统 void save_student(student *,int);//保存学生信息 void main()   {   menu();   } void save_student(student *s,int a)//保存学生信息   {   FILE *fp;     if((fp=fopen("d:\\学生信息.txt","wb"))==NULL)       {       printf("不能打开文件!\n");       }     else       {       printf("保存信息到D盘\n");       fprintf(fp,"本班所有学生具体信息如下:\r\n");       fprintf(fp,"  学号       姓名           数学成绩       英语成绩     计算机成绩     平均成绩\r\n");       for(int i=0;i<a;i++)         {         fprintf(fp,"%8d%12s%14.2f%14.2f%14.2f%14.2f\n",stu[i].number,stu[i].name,stu[i].sco.math,stu[i].sco.english,stu[i].sco.computer,stu[i].average);         fprintf(fp,"\r\n");         }       fclose(fp);       printf("信息保存成功!\n");       }   } void exit_student(void)//退出系统   {   exit(1);   } void print_help(void)//输出帮助信息   {   printf("本系统所能容纳的最大学生数为%d人\n学生信息保存在D盘根目录下,保存文件为“学生信息.txt”。\n感谢使用!\n",N);   } void input_score1(void)//统计成绩总函数   {   int c;   c=search_student2(iNumOfStu);   printf("学号:%d\n",stu[c].number);   printf("姓名:%s\n",stu[c].name);   input_score3(c);   printf("新成绩录入成功!\n");   stu[c].average=input_score2(c);   } void input_score3(int a)//统计成绩   {   printf("数学新成绩:");   scanf("%f",&stu[a].sco.math);   printf("英语新成绩:");   scanf("%f",&stu[a].sco.english);   printf("计算机新成绩:");   scanf("%f",&stu[a].sco.computer);   } void change_student2(int a)//修改学生资料   {   printf("学号:%d----修改为:",stu[a].number);   scanf("%d",&stu[a].number);   getchar();   printf("姓名:%s----修改为:",stu[a].name);   gets(stu[a].name);   printf("数学成绩:%.2f----修改为:",stu[a].sco.math);   scanf("%f",&stu[a].sco.math);   printf("英语成绩:%.2f----修改为:",stu[a].sco.english);   scanf("%f",&stu[a].sco.english);   printf("计算机成绩:%.2f----修改为:",stu[a].sco.computer);   scanf("%f",&stu[a].sco.computer);   } void change_student1(void)//修改总函数   {   int c;   c=search_student2(iNumOfStu);   getchar();   printf("是否要修改此学生信息?(“y”代表是)");   char d;   scanf("%c",&d);   if(d=='y'||d=='Y')     {     change_student2(c);       stu[c].average=input_score2(c);     printf("信息修改成功!\n");     }   } void delete_student1(void)//删除总函数   {   int c;   c=search_student2(iNumOfStu);   getchar();   printf("是否删除此条记录?(“y”代表是)");   char d;   scanf("%c",&d);   if(d=='y'||d=='Y')     {     delete_student2(c,iNumOfStu);     printf("记录已删除!\n");     }   } void delete_student2(int a,int b)//删除学生信息   {   for(int i=a;i<b-1;i++)     {     stu[i]=stu[i+1];     }   --iNumOfStu;   } void search_student1(void)//查询总函数   {   printf("1、按学号查询\n2、按平均分最高查询\n请选择:");   int c;   scanf("%d",&c);   switch(c)     {     case 1:       {       search_student2(iNumOfStu);       break;       }     case 2:       {       search_student3(iNumOfStu);       break;       }     default: break;     }   } void menu(void)//菜单调度总函数   {   print_menu();   choosemenu();   } void sort_student1(void)//排序总函数   {   printf("1、按数学成绩排序\n2、按英语成绩排序\n3、按计算机成绩排序\n4、按平均成绩排序\n请选择:");   int c;   scanf("%d",&c);   switch(c)     {     case 1:       {       sort_student2(stu,iNumOfStu);       break;       }     case 2:       {       sort_student3(stu,iNumOfStu);       break;       }     case 3:       {       sort_student4(stu,iNumOfStu);       break;       }     case 4:       {       sort_student5(stu,iNumOfStu);       break;       }     default: break;     }   } void print_student1(int a)//显示全部学生资料   {   printf("本班所有学生具体信息如下\n");   print_student2();   for(int i=0;i<a;i++)     {     print_student3(i);     }   } void print_student3(int a)//显示学生信息   {   printf("%8d%12s%14.2f%14.2f%14.2f%14.2f\n",stu[a].number,stu[a].name,stu[a].sco.math,stu[a].sco.english,stu[a].sco.computer,stu[a].average);   } void print_student2(void)//显示表头   {   printf("  学号       姓名           数学成绩       英语成绩     计算机成绩     平均成绩\n");   } void input_student4(int a,int b)//覆盖原信息   {   stu[a]=stu[b-1];   --iNumOfStu;   } void input_student3(int &a,int b)//判断学号是否重复   {   if(a!=0)     {     int i=0;     do       {       if(stu[a].number==stu[i].number)         {         printf("此学号代表的学生已录入\n1、覆盖原信息\n2、重新输入\n请选择:");         int c;         scanf("%d",&c);         switch(c)           {           case 1:             {             input_student4(i,iNumOfStu);             a=iNumOfStu-1;             printf("信息已替换!\n");             break;             }           case 2:             {             printf("请重新输入学生信息:\n");             input_student1(iNumOfStu-1);             break;             }           default: break;           }         break;         }       ++i;       }       while(i<b-1);     }   } void print_menu(void)//输出菜单   {   printf("======欢迎来到学生信息管理系统======\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("      9、获取帮助信息\n");   printf("      10、退出系统\n");   printf("====================================\n");   printf("请选择:");   } void input_student2(void)//输入总函数   {   char end;   printf("请输入学生信息(在最后一个学生信息录入完成后以“/”结束录入):\n");   for(int i=0;(end=getchar())!='/';i++)     {     input_student1(i);     ++iNumOfStu;     input_student3(i,iNumOfStu);     }   for(int j=0;j<iNumOfStu;j++)     {     stu[j].average=input_score2(j);     }   } void input_student1(int a)//输入学生信息   {   printf("学号:");   scanf("%d",&stu[a].number);   getchar();   printf("姓名:");   gets(stu[a].name);   printf("数学成绩:");   scanf("%f",&stu[a].sco.math);   printf("英语成绩:");   scanf("%f",&stu[a].sco.english);   printf("计算机成绩:");   scanf("%f",&stu[a].sco.computer);   } float input_score2(int a)//计算学生平均成绩   {   return (stu[a].sco.math+stu[a].sco.english+stu[a].sco.computer)/3;   } void search_student3(int a)//按平均分最高查询并输出   {   int max=0;   for(int i=0;i<a;i++)     {     if(stu[max].average<stu[i].average)       {       max=i;       }     }   print_student2();   print_student3(max);   } void sort_student2(student s[],int a)//按照数学成绩排序   {   struct student temp;   for(int i=0;i<a-1;i++)     {     int max=i;     for(int j=i+1;j<a;j++)       if(stu[j].sco.math>stu[max].sco.math)         {         max=j;         }     if(max!=i)       {       temp=stu[max];       stu[max]=stu[i];       stu[i]=temp;       }     }   print_student2();   for(int k=0;k<a;k++)     {     print_student3(k);     }   } void sort_student3(student s[],int a)//按照英语成绩排序   {   struct student temp;   for(int i=0;i<a-1;i++)     {     int max=i;     for(int j=i+1;j<a;j++)       if(stu[j].sco.english>stu[max].sco.english)         {         max=j;         }     if(max!=i)       {       temp=stu[max];       stu[max]=stu[i];       stu[i]=temp;       }     }   print_student2();   for(int k=0;k<a;k++)     {     print_student3(k);     }   } void sort_student4(student s[],int a)//按照计算机成绩排序   {   struct student temp;   for(int i=0;i<a-1;i++)     {     int max=i;     for(int j=i+1;j<a;j++)       if(stu[j].sco.computer>stu[max].sco.computer)         {         max=j;         }     if(max!=i)       {       temp=stu[max];       stu[max]=stu[i];       stu[i]=temp;       }     }   print_student2();   for(int k=0;k<a;k++)     {     print_student3(k);     }   } void sort_student5(student s[],int a)//按照平均成绩排序   {   struct student temp;   for(int i=0;i<a-1;i++)     {     int max=i;     for(int j=i+1;j<a;j++)       if(stu[j].average>stu[max].average)         {         max=j;         }     if(max!=i)       {       temp=stu[max];       stu[max]=stu[i];       stu[i]=temp;       }     }   print_student2();   for(int k=0;k<a;k++)     {     print_student3(k);     }   } int search_student2(int a)//按照学号查找学生并输出   {   int num;   int c;   printf("请输入要查询的学号:");   scanf("%d",&num);   for(int i=0;i<a;i++)     {     if(num==stu[i].number)       {       c=i;       }     }   printf("此学生的信息是:\n");   print_student2();   print_student3(c);   return c;   } void choosemenu(void)//菜单选择   {   int i;   scanf("%d",&i);   switch(i)     {     case 1:       {       input_student2();       printf("按回车键返回主菜单");       getchar();       getchar();       menu();       break;       }     case 2:       {       delete_student1();       printf("按回车键返回主菜单");       getchar();       getchar();       menu();       break;       }     case 3:       {       search_student1();       printf("按回车键返回主菜单");       getchar();       getchar();       menu();       break;       }     case 4:       {       change_student1();       printf("按回车键返回主菜单");       getchar();       getchar();       menu();       break;       }     case 5:       {       print_student1(iNumOfStu);       printf("按回车键返回主菜单");       getchar();       getchar();       menu();       break;       }     case 6:       {       input_score1();       printf("按回车键返回主菜单");       getchar();       getchar();       menu();       break;       }     case 7:       {       sort_student1();       printf("按回车键返回主菜单");       getchar();       getchar();       menu();       break;       }     case 8:       {       save_student(stu,iNumOfStu);       printf("按回车键返回主菜单");       getchar();       getchar();       menu();       break;       }     case 9:       {       print_help();       printf("按回车键返回主菜单");       getchar();       getchar();       menu();       break;       }     case 10:       {       exit_student();       }     default: break;     }   }         运行结果:                         源文件下载地址: http://115.com/file/clnq138g#一个简单的学生成绩管理系统.rar (请将此地址复制到浏览器地址栏中访问下载页面)  

    标签: 成绩查询系统

    上传时间: 2019-06-08

    上传用户:啊的撒旦

  • 学生成绩guanli

    #include<stdio.h> #include<string.h> #include<stdlib.h> #define N 100 int iNumOfStu=0; struct score   {   float math;   float english;   float computer;   }; struct student   {   int number;   char name[20];   struct score sco;   float average;   }; struct student stu[N]; void print_menu(void);//输出菜单 void choosemenu(void);//菜单选择 void input_student1(int);//输入学生信息 void input_student2(void);//输入总函数 void input_student3(int &,int);//判断学号是否重复 void input_student4(int,int);//覆盖原信息 void sort_student3(student s[],int);//按照英语成绩排序 void sort_student4(student s[],int);//按照计算机成绩排序 void sort_student2(student s[],int);//按照数学成绩排序 void sort_student5(student s[],int);//按照平均成绩排序 float input_score2(int);//计算学生平均成绩 void print_student2(void);//显示表头 void print_student3(int);//显示学生信息 void print_student1(int);//显示全部学生资料 void sort_student1(void);//排序总函数 void menu(void);//菜单调度总函数 int search_student2(int);//按学号查询学生信息并输出 void search_student3(int);//按平均分最高查询并输出 void search_student1(void);//查询总函数 void delete_student2(int,int);//删除学生信息 void delete_student1(void);//删除总函数 void change_student2(int);//修改学生资料 void change_student1(void);//修改总函数 void input_score3(int);//统计成绩 void input_score1(void);//统计成绩总函数 void print_help(void);//输出帮助信息 void exit_student(void);//退出系统 void save_student(student *,int);//保存学生信息 void main()   {   menu();   } void save_student(student *s,int a)//保存学生信息   {   FILE *fp;     if((fp=fopen("d:\\学生信息.txt","wb"))==NULL)       {       printf("不能打开文件!\n");       }     else       {       printf("保存信息到D盘\n");       fprintf(fp,"本班所有学生具体信息如下:\r\n");       fprintf(fp,"  学号       姓名           数学成绩       英语成绩     计算机成绩     平均成绩\r\n");       for(int i=0;i<a;i++)         {         fprintf(fp,"%8d%12s%14.2f%14.2f%14.2f%14.2f\n",stu[i].number,stu[i].name,stu[i].sco.math,stu[i].sco.english,stu[i].sco.computer,stu[i].average);         fprintf(fp,"\r\n");         }       fclose(fp);       printf("信息保存成功!\n");       }   } void exit_student(void)//退出系统   {   exit(1);   } void print_help(void)//输出帮助信息   {   printf("本系统所能容纳的最大学生数为%d人\n学生信息保存在D盘根目录下,保存文件为“学生信息.txt”。\n感谢使用!\n",N);   } void input_score1(void)//统计成绩总函数   {   int c;   c=search_student2(iNumOfStu);   printf("学号:%d\n",stu[c].number);   printf("姓名:%s\n",stu[c].name);   input_score3(c);   printf("新成绩录入成功!\n");   stu[c].average=input_score2(c);   } void input_score3(int a)//统计成绩   {   printf("数学新成绩:");   scanf("%f",&stu[a].sco.math);   printf("英语新成绩:");   scanf("%f",&stu[a].sco.english);   printf("计算机新成绩:");   scanf("%f",&stu[a].sco.computer);   } void change_student2(int a)//修改学生资料   {   printf("学号:%d----修改为:",stu[a].number);   scanf("%d",&stu[a].number);   getchar();   printf("姓名:%s----修改为:",stu[a].name);   gets(stu[a].name);   printf("数学成绩:%.2f----修改为:",stu[a].sco.math);   scanf("%f",&stu[a].sco.math);   printf("英语成绩:%.2f----修改为:",stu[a].sco.english);   scanf("%f",&stu[a].sco.english);   printf("计算机成绩:%.2f----修改为:",stu[a].sco.computer);   scanf("%f",&stu[a].sco.computer);   } void change_student1(void)//修改总函数   {   int c;   c=search_student2(iNumOfStu);   getchar();   printf("是否要修改此学生信息?(“y”代表是)");   char d;   scanf("%c",&d);   if(d=='y'||d=='Y')     {     change_student2(c);       stu[c].average=input_score2(c);     printf("信息修改成功!\n");     }   } void delete_student1(void)//删除总函数   {   int c;   c=search_student2(iNumOfStu);   getchar();   printf("是否删除此条记录?(“y”代表是)");   char d;   scanf("%c",&d);   if(d=='y'||d=='Y')     {     delete_student2(c,iNumOfStu);     printf("记录已删除!\n");     }   } void delete_student2(int a,int b)//删除学生信息   {   for(int i=a;i<b-1;i++)     {     stu[i]=stu[i+1];     }   --iNumOfStu;   } void search_student1(void)//查询总函数   {   printf("1、按学号查询\n2、按平均分最高查询\n请选择:");   int c;   scanf("%d",&c);   switch(c)     {     case 1:       {       search_student2(iNumOfStu);       break;       }     case 2:       {       search_student3(iNumOfStu);       break;       }     default: break;     }   } void menu(void)//菜单调度总函数   {   print_menu();   choosemenu();   } void sort_student1(void)//排序总函数   {   printf("1、按数学成绩排序\n2、按英语成绩排序\n3、按计算机成绩排序\n4、按平均成绩排序\n请选择:");   int c;   scanf("%d",&c);   switch(c)     {     case 1:       {       sort_student2(stu,iNumOfStu);       break;       }     case 2:       {       sort_student3(stu,iNumOfStu);       break;       }     case 3:       {       sort_student4(stu,iNumOfStu);       break;       }     case 4:       {       sort_student5(stu,iNumOfStu);       break;       }     default: break;     }   } void print_student1(int a)//显示全部学生资料   {   printf("本班所有学生具体信息如下\n");   print_student2();   for(int i=0;i<a;i++)     {     print_student3(i);     }   } void print_student3(int a)//显示学生信息   {   printf("%8d%12s%14.2f%14.2f%14.2f%14.2f\n",stu[a].number,stu[a].name,stu[a].sco.math,stu[a].sco.english,stu[a].sco.computer,stu[a].average);   } void print_student2(void)//显示表头   {   printf("  学号       姓名           数学成绩       英语成绩     计算机成绩     平均成绩\n");   } void input_student4(int a,int b)//覆盖原信息   {   stu[a]=stu[b-1];   --iNumOfStu;   } void input_student3(int &a,int b)//判断学号是否重复   {   if(a!=0)     {     int i=0;     do       {       if(stu[a].number==stu[i].number)         {         printf("此学号代表的学生已录入\n1、覆盖原信息\n2、重新输入\n请选择:");         int c;         scanf("%d",&c);         switch(c)           {           case 1:             {             input_student4(i,iNumOfStu);             a=iNumOfStu-1;             printf("信息已替换!\n");             break;             }           case 2:             {             printf("请重新输入学生信息:\n");             input_student1(iNumOfStu-1);             break;             }           default: break;           }         break;         }       ++i;       }       while(i<b-1);     }   } void print_menu(void)//输出菜单   {   printf("======欢迎来到学生信息管理系统======\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("      9、获取帮助信息\n");   printf("      10、退出系统\n");   printf("====================================\n");   printf("请选择:");   } void input_student2(void)//输入总函数   {   char end;   printf("请输入学生信息(在最后一个学生信息录入完成后以“/”结束录入):\n");   for(int i=0;(end=getchar())!='/';i++)     {     input_student1(i);     ++iNumOfStu;     input_student3(i,iNumOfStu);     }   for(int j=0;j<iNumOfStu;j++)     {     stu[j].average=input_score2(j);     }   } void input_student1(int a)//输入学生信息   {   printf("学号:");   scanf("%d",&stu[a].number);   getchar();   printf("姓名:");   gets(stu[a].name);   printf("数学成绩:");   scanf("%f",&stu[a].sco.math);   printf("英语成绩:");   scanf("%f",&stu[a].sco.english);   printf("计算机成绩:");   scanf("%f",&stu[a].sco.computer);   } float input_score2(int a)//计算学生平均成绩   {   return (stu[a].sco.math+stu[a].sco.english+stu[a].sco.computer)/3;   } void search_student3(int a)//按平均分最高查询并输出   {   int max=0;   for(int i=0;i<a;i++)     {     if(stu[max].average<stu[i].average)       {       max=i;       }     }   print_student2();   print_student3(max);   } void sort_student2(student s[],int a)//按照数学成绩排序   {   struct student temp;   for(int i=0;i<a-1;i++)     {     int max=i;     for(int j=i+1;j<a;j++)       if(stu[j].sco.math>stu[max].sco.math)         {         max=j;         }     if(max!=i)       {       temp=stu[max];       stu[max]=stu[i];       stu[i]=temp;       }     }   print_student2();   for(int k=0;k<a;k++)     {     print_student3(k);     }   } void sort_student3(student s[],int a)//按照英语成绩排序   {   struct student temp;   for(int i=0;i<a-1;i++)     {     int max=i;     for(int j=i+1;j<a;j++)       if(stu[j].sco.english>stu[max].sco.english)         {         max=j;         }     if(max!=i)       {       temp=stu[max];       stu[max]=stu[i];       stu[i]=temp;       }     }   print_student2();   for(int k=0;k<a;k++)     {     print_student3(k);     }   } void sort_student4(student s[],int a)//按照计算机成绩排序   {   struct student temp;   for(int i=0;i<a-1;i++)     {     int max=i;     for(int j=i+1;j<a;j++)       if(stu[j].sco.computer>stu[max].sco.computer)         {         max=j;         }     if(max!=i)       {       temp=stu[max];       stu[max]=stu[i];       stu[i]=temp;       }     }   print_student2();   for(int k=0;k<a;k++)     {     print_student3(k);     }   } void sort_student5(student s[],int a)//按照平均成绩排序   {   struct student temp;   for(int i=0;i<a-1;i++)     {     int max=i;     for(int j=i+1;j<a;j++)       if(stu[j].average>stu[max].average)         {         max=j;         }     if(max!=i)       {       temp=stu[max];       stu[max]=stu[i];       stu[i]=temp;       }     }   print_student2();   for(int k=0;k<a;k++)     {     print_student3(k);     }   } int search_student2(int a)//按照学号查找学生并输出   {   int num;   int c;   printf("请输入要查询的学号:");   scanf("%d",&num);   for(int i=0;i<a;i++)     {     if(num==stu[i].number)       {       c=i;       }     }   printf("此学生的信息是:\n");   print_student2();   print_student3(c);   return c;   } void choosemenu(void)//菜单选择   {   int i;   scanf("%d",&i);   switch(i)     {     case 1:       {       input_student2();       printf("按回车键返回主菜单");       getchar();       getchar();       menu();       break;       }     case 2:       {       delete_student1();       printf("按回车键返回主菜单");       getchar();       getchar();       menu();       break;       }     case 3:       {       search_student1();       printf("按回车键返回主菜单");       getchar();       getchar();       menu();       break;       }     case 4:       {       change_student1();       printf("按回车键返回主菜单");       getchar();       getchar();       menu();       break;       }     case 5:       {       print_student1(iNumOfStu);       printf("按回车键返回主菜单");       getchar();       getchar();       menu();       break;       }     case 6:       {       input_score1();       printf("按回车键返回主菜单");       getchar();       getchar();       menu();       break;       }     case 7:       {       sort_student1();       printf("按回车键返回主菜单");       getchar();       getchar();       menu();       break;       }     case 8:       {       save_student(stu,iNumOfStu);       printf("按回车键返回主菜单");       getchar();       getchar();       menu();       break;       }     case 9:       {       print_help();       printf("按回车键返回主菜单");       getchar();       getchar();       menu();       break;       }     case 10:       {       exit_student();       }     default: break;     }   }         运行结果:                         源文件下载地址: http://115.com/file/clnq138g#一个简单的学生成绩管理系统.rar (请将此地址复制到浏览器地址栏中访问下载页面)   #include<stdio.h> #include<string.h> #include<stdlib.h> #define N 100 int iNumOfStu=0; struct score   {   float math;   float english;   float computer;   }; struct student   {   int number;   char name[20];   struct score sco;   float average;   }; struct student stu[N]; void print_menu(void);//输出菜单 void choosemenu(void);//菜单选择 void input_student1(int);//输入学生信息 void input_student2(void);//输入总函数 void input_student3(int &,int);//判断学号是否重复 void input_student4(int,int);//覆盖原信息 void sort_student3(student s[],int);//按照英语成绩排序 void sort_student4(student s[],int);//按照计算机成绩排序 void sort_student2(student s[],int);//按照数学成绩排序 void sort_student5(student s[],int);//按照平均成绩排序 float input_score2(int);//计算学生平均成绩 void print_student2(void);//显示表头 void print_student3(int);//显示学生信息 void print_student1(int);//显示全部学生资料 void sort_student1(void);//排序总函数 void menu(void);//菜单调度总函数 int search_student2(int);//按学号查询学生信息并输出 void search_student3(int);//按平均分最高查询并输出 void search_student1(void);//查询总函数 void delete_student2(int,int);//删除学生信息 void delete_student1(void);//删除总函数 void change_student2(int);//修改学生资料 void change_student1(void);//修改总函数 void input_score3(int);//统计成绩 void input_score1(void);//统计成绩总函数 void print_help(void);//输出帮助信息 void exit_student(void);//退出系统 void save_student(student *,int);//保存学生信息 void main()   {   menu();   } void save_student(student *s,int a)//保存学生信息   {   FILE *fp;     if((fp=fopen("d:\\学生信息.txt","wb"))==NULL)       {       printf("不能打开文件!\n");       }     else       {       printf("保存信息到D盘\n");       fprintf(fp,"本班所有学生具体信息如下:\r\n");       fprintf(fp,"  学号       姓名           数学成绩       英语成绩     计算机成绩     平均成绩\r\n");       for(int i=0;i<a;i++)         {         fprintf(fp,"%8d%12s%14.2f%14.2f%14.2f%14.2f\n",stu[i].number,stu[i].name,stu[i].sco.math,stu[i].sco.english,stu[i].sco.computer,stu[i].average);         fprintf(fp,"\r\n");         }       fclose(fp);       printf("信息保存成功!\n");       }   } void exit_student(void)//退出系统   {   exit(1);   } void print_help(void)//输出帮助信息   {   printf("本系统所能容纳的最大学生数为%d人\n学生信息保存在D盘根目录下,保存文件为“学生信息.txt”。\n感谢使用!\n",N);   } void input_score1(void)//统计成绩总函数   {   int c;   c=search_student2(iNumOfStu);   printf("学号:%d\n",stu[c].number);   printf("姓名:%s\n",stu[c].name);   input_score3(c);   printf("新成绩录入成功!

    标签: c语言

    上传时间: 2019-06-09

    上传用户:啊的撒旦

  • 有向直线L2中值

    给定一条直线L及L上的n+1个点,求整体服用转移费用最小。算法书上的例题

    标签: 直线

    上传时间: 2019-06-20

    上传用户:计算机容易秃头

  • win7操作说明

    Windows7下IE 8使用技巧5则 IE几乎是各位菜鸟、大虾上网时的首选浏览器,有关它的常规使用技巧,相信各位早已是耳熟能详了。只要你足够用心、细心,就一定会不断“挖掘”出IE新的使用技巧来。不信,就来看看下面的几则新鲜用法吧,相信会让各位有耳目一新之感! 1.寻找失落的IE启动按钮 正常情况下,IE浏览器的快速启动按钮会在系统任务栏中“安家落户”,可是一旦操作不小心,往往会导致IE浏览器的快速启动按钮在任务栏中“消失”。那么 你面对IE启动按钮从系统任务栏中消失时,你该如何去将它寻找回来呢?其实方法很简单,只要你按照下面的步骤来进行操作就可以了。 首先用鼠标右键单击桌面中的IE浏览器图标,从弹出的快捷菜单中执行“创建快捷方式”命令,这样就能为IE浏览器创建好一个对应的快捷方式。 接着打开系统资源管理窗口,依次双击C盘中的“Windows”文件夹、“ApplicationData”文件夹、“Microsoft”文件夹、 “InternetExplorer”文件夹、“QuickLaunch”文件夹;然后将桌面中创建好的IE快捷方式,直接拖动到 “QuickLaunch”文件夹窗口中。 当然还有更简洁的方法,那就是直接将系统桌面中的IE浏览器图标,用鼠标左键拖动到系统任务栏中,不过在拖放时一定要在出现虚线图标之后才可以。 2.让IE也能断点续传 大家知道,单击IE页面中的某个下载链接地址时,IE就会自动调用其内置的下载功能来下载文件;不过这种功能一旦遇到网络堵塞而掉线的情况时,就会将已经下载好的内容全部丢失,以后再次下载时还需要从头再来,显然IE内置的下载功能容易耽误下载时间。 那么我们有没有办法让IE的下载功能也支持断点续传呢?答案是肯定的。只要你使用IE来下载文件出现意外掉线时,或者发现IE下载进度条长时间没有任何反 应时,请不要单击该下载对话框中的“取消”按钮,而应该直接单击该窗口中的“x”按钮,来暂时退出下载状态;接着重新单击网页中的这个下载链接地址,然后 再单击“保存”按钮,在弹出的保存对话框中,将文件名和保存路径都设置为与上次没下载完时的文件相同,这样IE就能接着上次没下载完的位置,继续下载余下 的内容;当然这种IE断点续传功能只适合HTTP下载方式,而不适合FTP下载方式。 3.将IE选项设置“架空” 倘若允许其他人随意对IE的上网参数进行设置的话,那么IE的安全、甚至系统的安全都会受到威胁,例如一旦非法用户打开IE浏览器的“Internet选 项”设置框,将上网安全级别降低的话,那么网络中的各种病毒、木马,都有可能就会随之而来。为了确保安全,你有时必须“架空”IE浏览器中的 Internet选项,让非法用户无法自行设置IE上网参数: 首先打开Windows系统的资源管理器窗口,找到并进入到“system32”文件夹窗口,选中其中的“inetcpl.cpl”文件,并用鼠标右键单 击之,从弹出的右键菜单中,单击“重命名”选项,将“inetcpl.cpl”的文件名称更名为“inetcplnew.cpl”,当然你也能将其换成其 他名称,不过你一定要将更名后的文件名称记得,以后需要恢复时以便能快速找到。完成重命名操作后,再单击IE浏览器中的“Internet选项”命令时, 就不能进入到选项设置窗口了。 4.不用工具也能修复IE 在网上尽情冲浪时,IE难免会遭遇恶意攻击;那么面对被恶意修改的IE,你该如何去恢复它呢?大多数人都会去选用各种专业的IE修复工具,来对付IE的恶意攻击;也有水平高一些的“大虾”,通过手工修改注册表的方法,来恢复IE的本来“面貌”。可是当你手头没有专业的IE修复工具可以利用时,或者自己对注册表了解不深时,你该如何去修复IE呢?为此,本文为你提供一则非常便利的解决方法,不过该方法只能适合Windows2000或WindowsXP操作系统,下面就是该方法的具体实现步骤: 依次单击“开始”/“设置”/“控制面板”命令,然后依次双击“管理工具”/“计算机管理”图标,在随后弹出的窗口中,依次展开“系统工具”/“本地用户 和组”文件夹,再单击“用户”选项,在对应的右边子窗口中,右击空白区域,执行快捷菜单中的“新用户”命令,将新用户命名为“newusr”,同时设置好 该账号的访问密码; 完成新用户的创建任务后,依次单击“开始”/“关机”命令,然后执行“注销Administrator”操作,再改用“newusr”账号重新进入到 Windows2000系统;接着打开系统注册表编辑界面,依次展开注册表分支HKEY_CURRENT_USER\Software \Microsoft\InternetExplorer,并将“InternetExplorer”主键选中,再依次单击注册表菜单栏中的“注册表”/ “导出注册表文件”命令,将有关IE部分的注册表分支内容导出,例如保存为“ienew.reg”文件,如此一来你就能将“newusr”账号下关于IE 的正确设置全部导出来了;由于“newusr”账号是刚刚新建的,因此该账号下的IE设置都是系统默认的正确设置,也就是说它是没有被攻击过的; 下面注销“newusr”账号,再以“Administrator”账号登录系统;然后打开注册表编辑窗口,依次执行菜单栏中的 “注册表”/“导入注册表文件”命令,在弹出的文件选择对话框中,将前面导出的“ienew.reg”文件导入到注册表中,就能使IE恢复本来“面貌” 了。 当然,这样的方法比较麻烦,因此我们推荐IE一键修复 0.3(点击官方下载)167K ,中文绿色免费软件,可以一键修复被恶意篡改的IE浏览器。此外,在魔方(点此下载)中,也将加入IE的修复功和监控恶意软件等安全功能。 5. 找回Windows 7中的IE 8桌面图标 在Windows 7中,由于超级任务栏的存在,微软取消了IE 8的桌面图标设置,也就是说,在Windows 7中,无法在桌面显示IE 8图标,当然,快捷方式是不能算的。不过近来有会员在论坛为我们提供了一个很好的办法,可以以"曲线"的方式实现IE 8图标桌面显示。尽管还不完美,但基本的功能都具备了,大家可以通过Windows7优化大师 - 美化大师 - 系统外观来自行设置。 善用快捷键,玩转Windows 7 便签程序 便笺是一种可以粘贴在任意位置的正方形或长条形纸条,方便我们随时记录一些信息,或是安排日常工作,随写随记,非常方便。在 Windows 中为我们提供了和实物便笺一样功能的小程序,本人非常喜欢。在 Vista 中,这个小程序作为边栏小工具出现,但在 Windows 7 中已经成为了一个标准的Windows附件程序。 依次点击Windows7的开始菜单按钮 -》所有程序 -》附件 -》,点击打开便签,如下图所示: 不用软件,非会员彻底去除QQ2009/2010广告 昨天谈到了《不是VIP用户也不怕 不需任何补丁屏蔽迅雷广告》,用户反馈非常的多,如果没能设置成功的,请仔细阅读步骤,100%的可以搞定的,当然,如果迅雷再发新版升级后,就不保证了,有任何新的变化,请随时关注Windows7之家和Vista之家首页。 说完了迅雷,我们再来说下QQ吧,QQ的免费用户数量除了Windows外,就属它大了。 屏蔽广告除了更干净洁爽之外,更大的好处是不用随时下载体积大的flash动画和gif动画图片了,QQ登陆速度显著提升,同时,也少了带宽消耗。 非QQ会员彻底屏蔽QQ2009正式版广告: 在QQ2009 Beta版的时候,可以通过删除一些文件让非会员也能实现去广告的目的,可惜从QQ2009正式版起增加了文件完整性检查,删除文件会导致QQ无法启动,并要求重新安装。 那么对于非会员来说,QQ2009正式版(包括之后的SP6、SP5、SP4、SP3、SP2、SP1等)就不能手动去广告了吗? 其实还是有办法的,而且做起来也不难,你说是用第三方工具? 不需要!只要你对Windows操作系统稍有了解就可以轻松搞定,除了QQ2009,您也可以把这些招数用在QQ2010的测试版中,几乎完全一样。 下面,就把找到的方法共享给大家吧! 在开始之前,请先退出您正在运行中的QQ。 1、去除腾讯迷你首页:  对于每次启动QQ后,都弹出的“腾讯迷你首页”,很多人一定感到不爽,就让我们先拿它开刀吧。 首先进入QQ的安装文件夹,接着进入 Plugin\Com.Tencent.Advertisement\bin 文件夹,这里你会看到一个Advertisement.dll文件,它就是迷你首页的关键所在,只需将这个文件改成只读属性,以后启动QQ就不会再看到迷你首页了。在这个文件上面点击鼠标右键,点击属性,勾选只读,确定退出。 2、去除聊天窗口右上角广告: 这个操作针对XP、Win2003系统用户和Vista、Windows7、Win2008略有不同,主要是文件夹路径上的。 1)XP、Win2003系统用户操作方法: 进入 X:\Documents and Settings\用户名\Application Data\Tencent\QQ\Misc\com.tencent.advertisement (注意,X指的系统所在盘盘符,一般是C),首先删除这个文件夹里面的所有文件,注意文件夹本身不能删除,然后把当前用户的写入权限给拒绝掉(需要当前分区为NTFS格式)。 方法:文件夹上右键,属性 - 安全标签,选中当前登录用户,接着在下方“写入”权限里,拒绝上打勾。 2)Vista、Windows7、Win2008用户的操作: 进入 X:\users\用户名\appdata\Roaming\Tencent\QQ\Misc\com.tencent.advertisement,在这个文件上面点击鼠标右键,点击属性,然后点击安全标签, 选中你的当前用户,如下图示例中的Ruamei.com,然后点击“编辑”按钮,OK,写入那儿设置下拒绝吧。 这样,无论是会员还是非会员,你都不会有任何的广告图片下载了。 3、去除QQ2009/QQ2010聊天窗口的左下角广告 如今的聊天窗口,除了右上角的图片广告外,左下角还多了一条文字广告,既然要去广告,那么这块自然也不能遗忘。同样操作针对XP、Win2003系统用户和Vista、Windows7、Win2008而有所不同。 1)XP、Win2003系统用户操作方法: 再次提醒您修改前首先要关闭QQ,然后进入X:\Documents and Settings\用户名\Application Data\Tencent\Users\你的QQ号\QQ\(注意,X指的系统所在盘盘符,一般是C),删除其中的Misc.db,接着新建一个文件夹并命名为Misc.db(是不是和防止U盘自动运行病毒的方法很像)。 2)Vista、Windows7、Win2008用户的操作: 关闭QQ后,进入X:\users\用户名\appdata\Roaming\Tencent\Users\你的QQ号码\QQ\,然后操作同上。 搞定,如此一来,这几个地方都没广告了吧! 好吧,打开一个标签窗口如下图所示,当然,你可以多点多开。 如果你正在使用这个程序,是否觉得它的功能太简单了,点点右键,弹出的菜单中只能切换便笺的颜色,没有其他基本的格式编辑功能。 其实,除了标准的 Ctrl 加 XCVA 的剪切/复制/粘贴/全选快捷键之外,其实便笺程序还有一些快捷键可以使用: 快捷键 功能 Ctrl+N 新建一张便笺 Ctrl+D 删除当前便笺 Ctrl+E 居中对齐 Ctrl+R 右对齐 Ctrl+J 左对齐 Ctrl+I 斜体 Ctrl+B 粗体 Ctrl+U 下划线 Ctrl+T 删除线 Ctrl+Shift+> 加大选中文字的字号 Ctrl+Shift+< 缩小选中文字的字号 Ctrl+Shift+L 在文字前添加项目符号和编号(反复按可循环切换)。其中编号包括数字、大小写字母、大小写罗马数字几种形式。连按两次回车可取消。     知道了这些快捷键,我们就可以做出一些满足日常需要的格式了: 像 Windows 这种应用广泛的软件或硬件,由于全球数十亿人都会使用到,因此一个小小的功能特性都可以对世界造成很大的影响。 想想看,如果所有人都利用好这个小程序而不去买便笺,往小了说是省钱,往大了说可是环保了,能节约很多制作便笺的自然资源消耗。

    标签: win7 操作说明

    上传时间: 2019-06-22

    上传用户:yerbol

  • 兼容替代TM1628/1629/1640/1668少段位小体积:VK1S68C/1640B

    产品型号:VK1S68C 产品品牌:VINTEK/元泰/VINKA 封装形式:SSOP24 产品年份:新年份 主营LCD/LED液晶显示驱动IC,工程服务,技术支持,价格更具优势! VK1S68C 是1/5~1/8 占空比的 LED 显示控制驱动电路。由 10 根段输出、4 根栅输出、3 根段/栅输出, 1 个显示存储器、控制电路、键扫描电路组成了一个高可靠性的单片机外围 LED 驱动电路。串行数据通4 线串行接口输入到 VK1S68C采用 SSOP24L 的封装形式。 功能特点: 1. CMOS 工艺 2. 低功耗 3. 多种显示模式:设置选择段和位的个数(4~7 位,10~13 段) 4. 键扫描:10×2 的矩阵 5. 8 个层次的亮度调节电路 6. 4 线串行接口 7. 内置 RC 振荡 8. 封装形式为 SSOP24L 应用:可兼用TM1688/1628,广泛应用蓝牙耳机 体积小性价比高 产品型号:VK1640B 产品品牌:VINTEK/元泰/VINKA 封装形式:SSOP24 产品年份:新年份 主营LCD/LED液晶显示驱动IC,工程服务,技术支持,价格更具优势! 概述 VK1640B 是一款 LED(发光二极管显示器)驱动控制专用电路,内部集成有 MCU 数字接口、数据锁存器、LED 高压驱动。本产品采用 CMOS 工艺,主要应用于小型 LED 显示屏驱动。 特性说明 功能特点 ● 采用 CMOS 工艺制作 ● 显示模式(8 段×12 位) ● 辉度调节电路(占空比 8 级可调) ● 两线串行接口 ● 振荡方式:内置 RC 振荡 ● 内置上电复位 ● 采用 SSOP24 封装 联系人:许先生 QQ:1918885898 TEL:18898582398 永嘉原厂LED/LCD液晶控制器及驱动器系列 芯片简介如下: 内存映射的LED控制器及驱动器 VK1628 --- 通讯接口:STB/CLK/DIO    电源电压:5V(4.5~5.5V)    驱动点阵:70/52   共阴驱动:10段7位/13段4位  共阳驱动:7段10位   按键:10x2  封装SOP28 VK1629 --- 通讯接口:STB/CLK/DIN/DOUT    电源电压:5V(4.5~5.5V)    驱动点阵:128 共阴驱动:16段8位   共阳驱动:8段16位   按键:8x4  封装QFP44 VK1629A --- 通讯接口:STB/CLK/DIO    电源电压:5V(4.5~5.5V)    驱动点阵:128 共阴驱动:16段8位   共阳驱动:8段16位   按键:---  封装SOP32 VK1629B --- 通讯接口:STB/CLK/DIO    电源电压:5V(4.5~5.5V)    驱动点阵:112   共阴驱动:14段8位   共阳驱动:8段14位   按键:8x2  封装SOP32 VK1629C --- 通讯接口:STB/CLK/DIO    电源电压:5V(4.5~5.5V)    驱动点阵:120   共阴驱动:15段8位  共阳驱动:8段15位   按键:8x1  封装SOP32 VK1629D --- 通讯接口:STB/CLK/DIO    电源电压:5V(4.5~5.5V)    驱动点阵:96   共阴驱动:12段8位  共阳驱动:8段12位   按键:8x4  封装SOP32 VK1640 --- 通讯接口: CLK/DIN    电源电压:5V(4.5~5.5V)    驱动点阵:128 共阴驱动:8段16位  共阳驱动:16段8位   按键:---  封装SOP28 VK1650 --- 通讯接口: SCL/SDA    电源电压:5V(3.0~5.5V)    驱动点阵:8x16 共阴驱动:8段4位   共阳驱动:4段8位   按键:7x4  封装SOP16/DIP16 VK1668 ---通讯接口:STB/CLK/DIO    电源电压:5V(4.5~5.5V)    驱动点阵:70/52 共阴驱动:10段7位/13段4位  共阳驱动:7段10位   按键:10x2  封装SOP24 VK6932 --- 通讯接口:STB/CLK/DIN    电源电压:5V(4.5~5.5V)    驱动点阵:128 共阴驱动:8段16位17.5/140mA  共阳驱动:16段8位   按键:---  封装SOP32   RAM映射LCD控制器和驱动器系列 VK1024B  2.4V~5.2V   6seg*4com  6*3   6*2             偏置电压1/2 1/3   S0P-16 VK1056B  2.4V~5.2V   14seg*4com 14*3  14*2             偏置电压1/2 1/3   SOP-24/SSOP-24 VK1072B  2.4V~5.2V   18seg*4com 18*3  18*2             偏置电压1/2 1/3   SOP-28 VK1072C  2.4V~5.2V  18seg*4com  18*3  18*2             偏置电压1/2 1/3   SOP-28 VK1088B  2.4V~5.2V  22seg*4com  22*3                  偏置电压1/2 1/3   QFN-32L(4MM*4MM) VK0192   2.4V~5.2V  24seg*8com                         偏置电压1/4       LQFP-44 VK0256   2.4V~5.2V  32seg*8com                         偏置电压1/4       QFP-64 VK0256B  2.4V~5.2V  32seg*8com                         偏置电压1/4       LQFP-64 VK0256C  2.4V~5.2V  32seg*8com                         偏置电压1/4       LQFP-52 VK1621S-1 2.4V~5.2V  32*4 32*3 32*2   偏置电压1/2 1/3   LQFP44/48/SSOP48/SKY28/DICE裸片 VK1622B  2.7V~5.5V   32seg*8com                        偏置电压1/4       LQFP-48 VK1622S  2.7V~5.5V   32seg*8com          偏置电压1/4     LQFP44/48/52/64/QFP64/DICE裸片 VK1623S  2.4V~5.2V   48seg*8com          偏置电压1/4     LQFP-100/QFP-100/DICE裸片 VK1625    2.4V~5.2V  64seg*8com                 偏置电压1/4    LQFP-100/QFP-100/DICE VK1626    2.4V~5.2V  48seg*16com                偏置电压1/5    LQFP-100/QFP-100/DICE  (高品质 高性价比:液晶显示驱动IC  原厂直销 工程技术支持!) (所有型号全部封装均有现货,欢迎加Q查询 191 888 5898 许生) 高抗干扰LCD液晶控制器及驱动系列 VK2C21A  2.4~5.5V  20seg*4com  16*8          偏置电压1/3 1/4   I2C通讯接口    SOP-28 VK2C21B  2.4~5.5V  16seg*4com  12*8          偏置电压1/3 1/4   I2C通讯接口    SOP-24 VK2C21C  2.4~5.5V  12seg*4com  8*8           偏置电压1/3 1/4   I2C通讯接口    SOP-20 VK2C21D  2.4~5.5V  8seg*4com   4*8           偏置电压1/3 1/4   I2C通讯接口    NSOP-16 VK2C22A  2.4~5.5V  44seg*4com                偏置电压1/2 1/3   I2C通讯接口    LQFP-52 VK2C22B  2.4~5.5V  40seg*4com                偏置电压1/2 1/3   I2C通讯接口    LQFP-48 VK2C23A  2.4~5.5V  56seg*4com  52*8          偏置电压1/3 1/4   I2C通讯接口    LQFP-64 VK2C23B  2.4~5.5V  36seg*8com                偏置电压1/3 1/4   I2C通讯接口    LQFP-48 VK2C24   2.4~5.5V  72seg*4com 68*8 60*16     偏置电压1/3 1/4 1/5  I2C通讯接口 LQFP-80                   超低功耗LCD液晶控制器及驱动系列 VKL060   2.5~5.5V  15seg*4com            偏置电压1/2 1/3   I2C通讯接口   SSOP-24 VKL128   2.5~5.5V  32seg*4com            偏置电压1/2 1/3   I2C通讯接口   LQFP-44 VKL144A  2.5~5.5V  36seg*4com            偏置电压1/2 1/3   I2C通讯接口   TSSOP-48 VKL144B  2.5~5.5V  36seg*4com         偏置电压1/2 1/3   I2C通讯接口   QFN48L (6MM*6MM)   静态显示LCD液晶控制器及驱动系列 VKS118   2.4~5.2V  118seg*2com           偏置电压 --       4线通讯接口   LQFP-128 VKS232   2.4~5.2V  116seg*2com           偏置电压1/1 1/2   4线通讯接口   LQFP-128

    标签: 原装正品 LED数显驱动芯片 更少脚位 性价比高

    上传时间: 2019-07-03

    上传用户:shubashushi66

  • 64位PCI板卡插槽转换座的pcb和原理图

    PCI插槽64位板卡 转换座的pcb和原理图

    标签: PCI pcb 板卡 插槽 原理图 转换

    上传时间: 2019-10-09

    上传用户:zhmy923

  • History of Wireless

    The  motivation to write about the History  of  Wireless comes from Auguste Comte (1798-1857), a French philosopher who is termed the father  of  positivism and modem sociology  [Les Maximes d'Auguste Comte  (Auguste Comte's Mottos),  http://www.membres.lycos.fr/clotilde/l: On  ne connaitpas complgtement une science tant qu'on n'en saitpas l'histoire. (One does not know completely a science as long as one does not  know  its history.)

    标签: Wireless History of

    上传时间: 2020-05-27

    上传用户:shancjb

  • 基于51单片机的RS485从机系统设计

    题目:基于51单片机的RS485从机系统设计   单片机接口资源配置: 1.   上电复位电路; 2.   晶振电路采用11.0592Mhz晶振; 3.   485接口电路(P3.7用于485芯片的收发控制,收发管脚接单片机的rxd和txd); 4.   P2口通过外部跳线接相应的高低电平,配置从机地址为组号; 5.   P3.6外接一发光二极管(注意串联电阻进行限流); 6.   P3.2外接一按键,断开高电平,按下低电平; 7.   按键检测采用外部中断方式,下跳沿触发; 8.   单片机定时器0以模式1(16位模式)工作,产生50ms的定时中断,并在此基础上设计一单片机内部时钟(24小时制,能计数时、分、秒、50ms值); 9.   单片机串行通信采用模式1非多机通信方式,采用9600波特率以串行中断方式进行数据的收发通信,主机地址为0xF0,广播地址为0xFF。   系统功能需求: 1.   系统配置和自检功能: l  从机上电后进行初始化,通过读取P2口进行从机地址配置; l  发光二极管以每秒一次的频率闪烁(亮0.5秒,灭0.5秒); l  检测到一次按键按下操作后,熄灭发光二极管。   2.   数据接收和按键计时功能: l  从机接收主机程序(PC机上的串口调试程序)的按键允许命令帧并进行校验; l  校验正确并且目的地址是广播地址或者本从机的地址,通过发光二极管长亮指示,并允许按键操作; l  按键按下后,尽可能准确记录按键的动作时点(定时器的低8位、定时器的高8位、50ms值、秒、分、小时); l  按键操作只能响应一次,重复按键操作不响应; l  按键的动作时点记录后,发光二极管以每秒一次的频率闪烁(亮0.5秒,灭0.5秒)。   3.   数据发送功能: l  从机接收主机程序发来的时钟数据搜索命令帧并进行校验; l  如果校验正确并且数据帧的目的地址是本从机的地址,从机将前面记录的按键动作时点数据(定时器的低8位、定时器的高8位、50ms值、秒、分、小时)按附录中的时钟数据返回帧的帧格式回传给主机; l  时钟数据返回帧回传结束后,熄灭发光二极管。   4.   校验和生成和检测功能: l  发送数据帧时能自动生成数据帧校验和; l  每帧数据在发送帧尾前,发送一字节的当前帧数据的校验和; l  接收数据帧时能检测校验和并判断接收数据是否正确。 附录:帧定义   校验和的计算:除去帧头和帧尾后将帧中的其他数据求和并取低8位; 帧长:不计帧头、帧尾和校验和字节。   按键允许命令帧: 帧头 帧长 目的地址 源地址 命令字 校验和 帧尾 AA 04 FF F0 01 F4 66   时钟数据搜索命令帧: 帧头 帧长 目的地址 源地址 命令字  保留字 校验和 帧尾 AA 05 01 F0 03 00 F9 66   时钟数据返回帧: 帧头 帧长 目的地址 源地址 命令字 TL0 TH0 50ms 秒 分 时 校验和 帧尾 AA 0A F0 01 07 01 B6 09 03 00 00 C5 66     帧结构头文件frame.h(内容如下) //帧格式定义 #define FRAME_HEAD 0xAA    //帧头 #define FRAME_FOOT 0x66    //帧尾 #define FRAME_LEN  0x00    //帧长 #define FRAME_DST_ADR 0x01  //目的地址 #define FRAME_SRC_ADR 0x02 //源地址 #define FRAME_CMD  0x03    //命令字 #define FRAME_DATA 0x04    //帧数据起始 //帧命令定义 #define READY 0x01         //按键允许命令 #define TIME_SERCH 0x03    //时钟数据轮询命令 #define TIME_BACK  0x07    //时钟数据返回命令 //地址定义 #define BROAD_ADR  0xFF    //广播地址 #define MASTER_ADR 0xF0    //主机地址        

    标签: 51单片机 从机通信

    上传时间: 2020-06-18

    上传用户:umuo