C语言程序设计实训说明书 某学院教学信息管理系统
- 格式:pdf
- 大小:2.01 MB
- 文档页数:46
C程序设计报告书系部名称:电子工程学院学生姓名:专业名称:电子信息工程班级:学号:时间:2010年6月21日至2010年7月2日实验题目学生信息管理系统实验目的:了解利用c语言进行程序设计,通过利用模块化利用数组设计程序的方法,培养能够熟练应用该方法进行程序的设计,进而提高运用c语言编辑程序的能力。
一、实验内容通过c语言为主体,编写了一套学生成绩管理系统,该系统具有7项主要功能:分别为输入、显示、排列、修改、删除、添加、查询。
利用改程序可以在实际中处理问题,减少人工操作中的失误,以方便在实际工作可以利用此程序进行信息处理。
二、需求分析本程序将用到文件系统,list.txt文件内容作为数据源,其中单行内容代表一张纸条。
程序运行后首先将文件系统的原始数据读取并保存到程序的结构体数组当中,所以应提供文件输入的操作;由于纸条数据零散,所以要对原始数据进行分类操作并提供一个数组用于保存分类信息;在程序中要进行统计工作,所以要提供显示、排序等操作;另外应提供键盘式选择菜单实现功能选择对所开发系统功能的描述,想要实现的目标,测试数据等。
四、概要设计(1、方案设计对系统进行分析,给出结构图2、模块功能说明对各个模块进行功能的描述)2.各功能模块说明:1、学生信息录入功能(学生信息用文件保存)--输入;2、修改,删除,添加学生信息;3、从文件中读取学生信息,查询学生信息,可按照学号查询;4、从文件中读取学生信息,按储存量输出信息;5、按照成绩给学生排序;五、详细设计及运行结果1.学生管理系统模块图2.程序可以满足以下功能:1.各模块间通过菜单切换和调用2.主函数通过调用菜单函数实现对各功能模块的调用,各功能模块间根据需要可相互调用。
3.程序能够保证各模块功能的独立和数据共享。
4.相近功能以级联菜单的形式集成。
六、调试情况,设计技巧及体会两周的课程设计,通过学习,创建模块,到组织成为一个系统,让我受益匪浅,在其中,也遇到过许多问题,其中有些经过多次的调试仍不见效,让我也感到很头疼。
中北大学程序设计实训说明书学院、系:软件学院专业:软件工程学生姓名:学号:设计题目:某学院教学信息管理系统起迄日期: 2014年11月21日~2015年1月17日指导教师:何志英2015 年 1月 10 日一、选题要求题目一:某学院教学信息管理系统功能:1、每一条记录包括一位教师的职工号、姓名、职称、性别、3门主讲课程(课程名称、开课学期、课程性质(学位与非学位课)和教学效果),教学效果综合评分。
2、输入功能:可以一次完成若干条记录的输入。
3、显示功能:完成全部教师记录的显示。
4、查找功能:完成按姓名或课程查找教师的相关记录,并显示。
5、排序功能:按职工号或教学效果综合评分进行排序。
6、插入功能:按教学效果综合评分高低插入一条教师记录。
7、将教师记录存在文件中。
8、应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观!要求:1、用C语言实现系统;2、利用结构体数组实现教学信息的数据结构设计;3、系统具有增加,查询,插入,排序等基本功能;4、系统的各个功能模块要求用函数的形式实现;5、将教学信息存在文件中。
考试题目要求:1、按教师性别统计统计评分的总算2、删除一个函数,程序仍能正常运行二、程序设计方法及主要函数介绍程序设计方法1.数据结构的设计:程序要求文档中要求使用结构体数组完成设计,每一条记录包括一位教师的职工号、姓名、职称、性别、3门主讲课程(课程名称、开课学期、课程性质(学位与非学位课)和教学效果),教学效果综合评分。
数据结构设计如下:{ 课程的定义与描述[40]; 课程名称; 开课学期[8]; 课程性质; 教学效果};{ 教师的定义与描述[8]; 姓名; 职工号[2]; 性别; 教学效果综合评分[8]; 职称[3]; 3门主讲课程};2.主函数与其他函数的关系:3.结构化的程序设计方法将实用功能封装在每一个子函数中,主函数通过调用子函数来实现相对应的功能。
体现了“自顶向下,逐步求精”的结构化程序设计思想。
、《C#.N E T程序设计》课程设计说明书教师信息管理系统一、课程设计目的1)要求学生达到熟练掌握C#.NET基本结构以及C#语言的基本知识和技能;2)掌握面向对象程序开发的基本思路和方法;3)掌握数据库开发基本知识;4)能够利用所学的基本知识和技能,进行简单数据库应用程序设计。
二、课程设计任务与要求1. 基本要求:1)要求利用C#的编程思想以及组件开发原理来完成系统的设计;2)突出C#语言与其它语言不同点(即体现C#的高级功能,如属性概念、接口、事件、委托等);3)体现可视化编程基本思想,如系统带有菜单、工具栏、状态栏以及一些常用的高级控件。
2. 创新要求:在基本要求达到后,可进行创新设计。
三、需求分析本系统的设计主要具备以下功能:教师授课信息管理,即课程管理;教师个人信息管理;教师所属院系信息管理;教师月收入信息管理。
开始的界面也很美观,同时也方便用户的使用,快捷,实用。
这个设计中的每个模块都提供了以下四个功能:添加、修改,查询浏览以及删除,更清晰细致的展现了整个系统设计。
四、概要设计1、模块功能:(1)教师个人信息管理:添加:增加教师个人信息记录。
浏览:对已有教师个人信息进行浏览。
修改:对现有信息记录进行修改。
删除:删除选中信息记录。
(2)课程信息管理:添加:增加课程信息记录。
浏览:对已存在信息记录浏览。
修改:修改已存在信息记录。
删除:删除信息记录。
(3)院系类别信息管理:添加:增加院系类别信息记录。
浏览:对已存在信息记录浏览。
修改:修改已存在信息记录。
删除:删除信息记录。
(4)教师工资管理:添加:增加教师月工资信息记录。
浏览:对已存在信息记录浏览。
修改:修改已存在信息记录。
删除:删除信息记录。
2、模块结构:3、数据库设计:授课信息Tb_course部门信息表Tb_bumen月收入Tb_shouru4、文件夹设计:五、详细设计注意:此部分应包括具体设计过程,如设计目的、设计思路,界面设计,代码实现(关键代码)等,但不需要粘贴所有程序代码。
c语言课程设计学生管理系统一、教学目标本课程的学习目标包括知识目标、技能目标和情感态度价值观目标。
知识目标要求学生掌握C语言的基本语法、数据结构、算法和编程技巧。
技能目标要求学生能够使用C语言进行程序设计,解决实际问题。
情感态度价值观目标要求学生培养良好的编程习惯,注重代码的可读性和可维护性,提高团队合作能力和解决问题的能力。
通过本课程的学习,学生将能够熟练掌握C语言的基本语法和编程技巧,具备独立编写简单程序的能力。
同时,学生将培养良好的编程习惯,注重代码的质量,提高团队合作能力和解决问题的能力。
学生将能够运用C语言进行程序设计,解决实际问题,提高自己的计算思维能力和创新能力。
二、教学内容教学内容将根据课程目标进行选择和,确保内容的科学性和系统性。
教学大纲将明确教学内容的安排和进度,指出教材的章节和列举内容。
教材:C程序设计语言(K&R)第1周:C语言概述、基本语法、数据类型和运算符第2周:控制语句、函数、数组和字符串第3周:指针、结构体和文件操作第4周:算法和编程技巧第5周:项目实践和问题解决三、教学方法教学方法将多样化,以激发学生的学习兴趣和主动性。
将采用讲授法、讨论法、案例分析法和实验法等教学方法。
讲授法:通过讲解和示范,引导学生掌握C语言的基本语法和编程技巧。
讨论法:学生进行小组讨论,促进学生之间的交流和合作,培养团队合作能力。
案例分析法:通过分析实际案例,引导学生运用C语言解决实际问题,提高问题解决能力。
实验法:安排实验课程,让学生亲自动手编写代码,培养实际编程能力和创新思维。
四、教学资源教学资源的选择和准备将充分支持教学内容和教学方法的实施,丰富学生的学习体验。
将使用教材、参考书、多媒体资料和实验设备等教学资源。
教材:C程序设计语言(K&R)参考书:C Primer Plus、C和指针多媒体资料:教学PPT、视频教程、在线编程练习平台实验设备:计算机、编程环境、网络资源通过以上教学资源的支持,学生将能够更好地学习C语言,提高编程能力,培养创新思维和问题解决能力。
c语言课程设计信息管理系统一、教学目标本课程的教学目标是使学生掌握C语言程序设计的基本知识和技能,能够运用C语言设计简单的信息管理系统。
具体分为以下三个部分:1.知识目标:学生需要掌握C语言的基本语法、数据类型、运算符、控制结构、函数等基本知识,了解面向过程的编程思想。
2.技能目标:学生能够运用C语言编写简单的程序,具备调试和解决问题的能力,能够独立完成一个小型信息管理系统的设计。
3.情感态度价值观目标:培养学生对计算机科学的兴趣和热情,提高学生解决问题的能力,培养学生的创新精神和团队合作意识。
二、教学内容本课程的教学内容主要包括C语言的基本语法、数据类型、运算符、控制结构、函数等基本知识,以及面向过程的编程思想。
具体安排如下:1.第一章:C语言基础知识,介绍C语言的基本语法、数据类型、运算符等。
2.第二章:控制结构,介绍条件语句、循环语句等控制结构。
3.第三章:函数,介绍函数的定义、声明和调用,以及递归函数。
4.第四章:数组和字符串,介绍一维数组、多维数组、字符串的基本操作。
5.第五章:指针,介绍指针的概念、运算和应用。
6.第六章:结构体和联合体,介绍结构体、联合体的定义和应用。
7.第七章:文件操作,介绍文件的概念、文件操作函数和文件指针。
8.第八章:面向过程的编程思想,介绍模块化编程、函数指针等概念。
三、教学方法本课程的教学方法采用讲授法、案例分析法和实验法相结合的方式。
在教学过程中,教师会通过讲解和示例让学生掌握C语言的基本知识和编程技巧,同时通过案例分析法让学生了解信息管理系统的实现过程。
此外,实验法将用于培养学生的实际编程能力和问题解决能力。
四、教学资源本课程的教学资源包括教材、多媒体资料和实验设备。
教材选用《C程序设计语言》(K&R)作为主要参考书,多媒体资料包括教学PPT、视频教程等,实验设备包括计算机、网络等。
这些教学资源将用于支持教学内容和教学方法的实施,丰富学生的学习体验。
功能说明:实现两种权限的身份登陆的教务管理系统*/#include "stdio.h"#include "stdlib.h"#include "string.h"#include "time.h"#include "memory.h"#define share "d:\\share.dat" //定义邮件地址#define manager "d:\\manager.dat" //定义管理员邮件地址#define outmsg "d:\\outmsg.dat" //定义公告邮件地址#define logtimemsg "d:\\used login time.dat" //定义用户登录时间信息#define star_stu "d:\\stu_scname.dat" //定义学生起始文件信息#define stu_msg "d:\\stu.dat" //定义学生成绩信息地址#define mass_key "3110008758" //定义文件头部密码typedef struct student stu;#define sc_num 4 //只设定4门科目,不允许改动#define uint unsigned int/*学生成绩管理系统结构*/struct student{char num[10]; /*学生学号*/char name[10]; /*学生姓名*/uint score[sc_num]; /*科目分数*/uint average; /*科目平均分*/stu *next;}st;char gettemp=0;/*管理员身份识别结构*/typedef struct username user;struct username{char username[20];//char password[20];}use;/*时间登录信息*/struct Logtime{char userlogin[20];struct tm;};char logc;//登录次数typedef struct Logtime logtime;//========================================================== //定义通讯协议//==========================================================#define mass_max 200 //定义信息量struct Massage{int cont; //文件数量char username[15]; //发送人char mass[mass_max];//信息}mas;typedef struct Massage massage;//========================================================== //========================================================== char userlogin[10];char sc_name[sc_num][10];/*以上是学生信息*/char welcome(void);/*用户界面,返回0,则表示退出系统*//*==================================================================== 学生信息操作==================================================================== */stu*creat();/*建立链表*/void display(stu *head);/*显示用户信息*/void insert(stu *head);/*增加学生信息*/stu* delname(stu*head,char *stu_name);/*根据学生姓名删除用户信息*/stu* delnum(stu *head,char *stu_num);/*根据学生学号删除用户信息*/stu* checkname(stu *head,char *stu_name);/*输出指定学生的信息*/stu* checknum(stu *head,char *stu_num);/*输出指定学生学号的学生信息*/ void changsc_name(stu *head,char *name);/*修改用户成绩*/void changsc_num(stu *head,char *num);/*修改用户成绩*/void waring(void);/*产生警告信息*/char cheknum(char *num);/*检查学生学号是否符合格式*/char chekname(char *name);/*检查学生姓名是否符合格式*/char chekscore(char score);/*检查学生分数是否符合格式*/stu* sortscore(stu *head);/*学生按平均成绩排序*/stu* sortnum(stu *head);/*学生信息按学号排序*//*==================================================================== 学生用户登录==================================================================== */char stulogin(void);/*进入普通用户登录界面*/char stucheck(char *nam,char *stnum);/*查找是否存在该学生信息*/char newlogin(char *nam,char *stnum);/*注册学生信息*/void disnewst(void);/*获得学生信息*//*==================================================================== 系统管理选择,管理员权限==================================================================== */void stu_system(void);/*对各种操作集中管理*/void sentmsg(void);/*发送公告*/char readmsg(void);/*浏览信息*/char delemsg(void);//删除信息void chagesbject(void);/*修改课程信息*//*==================================================================== 用户登录信息==================================================================== */void setlogintime(void);/*记录用户登录时间*/void dislogintime(void);/*显示用户登录信息*/void setused(void);/*注册新用户资料*/char usedcheckname(char *name);/*用户信息检查,若存在用户,则返回1,否则返回0*/ char usedcheckpass(char *name,char *password);/*查看用户名密码是否符合*//*====================================================================存储操作====================================================================*/char save(stu *head);/*保存用户数据*/char disload();/*显示用户信息*/stu* load(void);/*加载用户数据*/void clrtxt(char *str);/*清除文本信息*/char* creat_txt(char *username);/*根据用户名,创建一个用户文件*/FILE* chekuser(char *username);/*根据用户名,查找是否有此用户信息,若无,返回NULL*/ /*====================================================================---------------main函数----------====================================================================*/void main(){FILE *fp;char i,j;char name[15];system("color b5");memset(name,'\0',sizeof(name));if((fp=fopen(star_stu ,"r+"))==NULL){printf("将新建文件!\n");fp=fopen(star_stu ,"w+");}fread(name,sizeof(name),1,fp);if(strcmp(name,mass_key)!=0){printf("文件载入出错!\t N为退出回车键继续...:");i=getchar();if((i=='n')||(i=='N')){fclose(fp);exit(1);}else{printf("\n\n数据将重新初始化!\n");printf("\n\n请输入4门科目名称\n");memset(name,'\0',sizeof(name));fwrite(name,sizeof(name),5,fp);strcpy(name,mass_key);rewind(fp);fwrite(name,sizeof(name),1,fp);for(i=0;i<sc_num;i++){printf("\n\n第%d门科目名称: ",i+1);scanf("%s",sc_name[i]);if(fwrite(sc_name[i],sizeof(sc_name[i]),1,fp)!=1){printf("\n\n\t\t\t\t保存出错!\n");getchar();exit(1);}}}}else{if(fp==NULL)printf("\n文件错误!");fscanf(fp,"%s%s%s%s",sc_name[0],sc_name[1],sc_name[2],sc_name[3]);}fclose(fp);fp=fopen(share,"w"); //为防止文件在后面打开错误fclose(fp);fp=fopen(manager,"w");fclose(fp);fp=fopen(outmsg,"w");fclose(fp);do{j=welcome();if(j==1){system("cls");printf("\t\t欢迎进入学生用户中心系统!");setlogintime();j=stulogin();}else if(j==2){setlogintime();stu_system();}}while(j!=0);fp=fopen(share,"w"); //为防止文件未关闭,倒置文件内容丢失fclose(fp);fp=fopen(manager,"w");fclose(fp);fp=fopen(outmsg,"w");fclose(fp);fp=fopen(logtimemsg,"w");fclose(fp);fp=fopen(star_stu,"w");fclose(fp);fp=fopen(stu_msg,"w");fclose(fp);}/*====================================================================---------------------------初始化用户界面---------------------------====================================================================*///返回1,则进入stu用户界面//返回0,则表示退出//返回2,则表示进入管理员界面char welcome(void){char username[20];char userpass[20];char i,wrong_cont=0,key=0,weling=1,back=0;char temp;system("color b5");while(weling){do{system("cls");printf("\t*********************欢迎进入教务管理系统********************\n");printf("\t* *\n");printf("\t* 1.用户登录*\n");printf("\t* *\n");printf("\t* 2.用户注册*\n");printf("\t* *\n");printf("\t* 3.管理员登陆*\n"); printf("\t* *\n"); printf("\t* 4.管理员注册*\n"); printf("\t* *\n"); printf("\t* 5.退出系统*\n"); printf("\t* *\n"); printf("\t=============================================================\n"); printf("\t 请按命令提示操作\n"); printf("\n\n\n");printf("\n\n\n");printf("您输入的命令为:\t");i=getchar();if((i!='1')&&(i!='2')&&(i!='3')&&(i!='4')&&(i!='5')){printf("\n输入错误的指令!请按命令提示操作1-3\n");getchar();}}while((i!='1')&&(i!='2')&&(i!='3')&&(i!='4')&&(i!='5'));switch(i){case '1':{system("cls");memset(username,'\0',sizeof(username));memset(userpass,'\0',sizeof(userpass));printf("\n\t请输入用户名:\t");scanf("%s",username);printf("\n\t请输入学号:\t");scanf("%s",userpass);temp=stucheck(username,userpass);if(temp==0){printf("没有学生档案信息!请注册...\n");getchar();break;}else if(temp==1){memset(userlogin,'\0',sizeof(userlogin));strcpy(userlogin,username);printf("\n\t学生成绩登录有效!");getchar();return 1;}getchar();//=======================break;}case '2':{system("cls");memset(username,'\0',sizeof(username));memset(userpass,'\0',sizeof(userpass));printf("\n\t请输入用户名:\t");scanf("%s",username);printf("\n\t请输入学号:\t");scanf("%s",userpass);while(cheknum(userpass)!=1){printf("您的输入格式有误,请重新输入!\n");printf("按回车键继续...\n");getchar();memset(userpass,'\0',sizeof(userpass));printf("\n\t请输入学号:\t");scanf("%s",userpass);}if(newlogin(username,userpass))printf("\n\t注册成功!用户名:%s\t学号:%s",username,userpass);getchar();break;}case '3':{do{system("cls");memset(username,'\0',sizeof(username));memset(userpass,'\0',sizeof(userpass));printf("\n\t请输入用户名:\t");scanf("%s",username);printf("\n\t请输入密码:\t");scanf("%s",userpass);if(usedcheckpass(username,userpass)==0){wrong_cont++;if(wrong_cont==3){printf("\n\t输入次数大于3次!请按回车键退出系统!\n");getchar();weling=0;return 0;}key=1;printf("\n\t按1选择返回主菜单\n\t按0继续输入用户验证码\n");do{back=getchar();if((back!='1')&&(back!='0')){printf("\n\t输入错误!按回车键继续...");getchar();}}while((back!='1')&&(back!='0'));if(back=='1')key=0;}else{key=0;weling =0;system("cls");printf("\n\n\t\t欢迎%s进入学生管理系统\n",username);memset(userlogin,'\0',sizeof(userlogin));strcpy(userlogin,username); //记录用户登录信息return 2;}}while(key);back=0;weling=1;break;return 2;}case '4':{setused();/*注册新管理员资料*/weling=1;break;}case '5':{weling=0;return 0;}}}return 1;}/*==================================================================== ---------------建立链表----------==================================================================== */stu*creat()/*建立链表*/{char i,j;char stu_num;stu *p1, *p2;stu *head;FILE *fp;fp=fopen(stu_msg,"w+");head=(stu*)malloc(sizeof(stu));head->next=NULL;p1=p2=(stu*)malloc(sizeof(stu));i=0,j=0;system("cls");printf("\n\n请输入要录入的学生人数: ");scanf("%d",&stu_num);for(i=0;i<stu_num;i++){system("cls");p1->average=0;printf("\n\n请输入学生学号: ");scanf("%s",p1->num);while(!cheknum(p1->num)){printf("\n\n输入格式错误!请重新输入学号: ");scanf("%s",p1->num);}printf("\n\n请输入学生姓名: ");scanf("%s",p1->name);while(!chekname(p1->name)){printf("\n\n输入格式出错!不能带数字或下划线!\n");printf("\n\n请重新输入学生姓名: ");scanf("%s",p1->name);}do{printf("\n\n请输入学生%s成绩:",sc_name[j]);scanf("%d",&p1->score[j]);while((100<p1->score[j])||(p1->score[j]<0)){printf("\n\n成绩格式出错!\n ");getchar();printf("\n\n请重新输入学生成绩: ");scanf("%d",&p1->score[j]);}p1->average+=p1->score[j];j++;}while(j<sc_num);j=0;p1->average=p1->average/4;if(i==0){head->next=p1; /*分清楚是head->next=p还是head=p*/p2=p1;p1->next=NULL;}else{p2->next=p1;p2=p1;p2->next=NULL; /*产生新的节点*/}fwrite(p1,sizeof(stu),1,fp);p1=(stu*)malloc(sizeof(stu));}display(head);getchar();fclose(fp);return head;}/*====================================================================检查学生学号是否符合格式,若正确,则返回1,否则返回0==================================================================== */char cheknum(char *num)/*检查学生学号是否符合格式*/{char i; /*获取字符串长度*/char j=strlen(num);for(i=0;i<j;i++){if(('0'>num[i])||('9'<num[i])){return 0;exit(1);}}return 1;}/*==================================================================== 检查学生姓名是否符合格式,若正确,则返回1,否则返回0==================================================================== */char chekname(char *name)/*检查学生姓名是否符合格式*/{char i;for(i=0;i<strlen(name);i++){/*if(('A'>name[i])||(('Z'<name[i])&&('a'>name[i]))||('z'<name[i]))/if(name[i]<18){return 0;exit(1);}*/}return 1;}/*==================================================================== 显示学生成绩情况==================================================================== */void display(stu *head)/*显示用户信息*/{stu *p1;char i=0;p1=head->next;system("cls");if(p1!=NULL){while(p1!=NULL){if(i==0){printf("姓名\t学号\t %s\t %s\t %s\t%s\t平均分\n",sc_name[0],sc_name[1],sc_name[2],sc_name[3]);i++;}printf("%s\t%s\t %d\t %d\t%d\t%d\t%d\n",\p1->name,p1->num,p1->score[0],p1->score[1],p1->score[2],p1->score[3],p1->average);p1=p1->next;}getchar();}else{printf("\t\t\t链表为空!\n\n\n请按回车键继续...\n");getchar();}}/*====================================================================插入学生信息====================================================================*/void insert(stu *head)/*增加学生信息*/{stu *p1,*p2;char j=0;p1=head->next;p2=(stu*)malloc(sizeof(stu)); /*创建新的学生信息*/p2->average=0;system("cls");printf("\n\n请输入要增加的学生学号: ");scanf("%s",p2->num);while(!cheknum(p2->num)){printf("\n\n输入格式错误!请重新输入学号: ");scanf("%s",p2->num);}printf("\n\n请输入学生的姓名: ");scanf("%s",p2->name);while(!chekname(p2->name)){printf("\n\n输入格式出错!不能带数字或下划线!\n");printf("\n\n请重新输入学生姓名: ");scanf("%s",p2->name);}do{printf("\n\n请输入学生%s成绩:",sc_name[j]);scanf("%d",&p2->score[j]);while((100<p2->score[j])||(p2->score[j]<0)){printf("\n\n成绩格式出错!\n ");getchar();printf("\n\n请重新输入学生成绩: ");scanf("%d",&p2->score[j]);}p2->average+=p2->score[j];j++;}while(j<sc_num);p2->average=p2->average/4;if(head->next==NULL){printf("\n原链表为空!");getchar();head->next=p2;}else{while(p1->next!=NULL)p1=p1->next;p1->next=p2;p2->next=NULL;}display(head);getchar();}/*====================================================================删除学生信息====================================================================*/stu* delname(stu*head,char *stu_name)/*根据学生姓名删除用户信息*/{stu *p1,*p2;char i,j=0;system("cls");if(head->next==NULL){printf("\n\n没有学生信息!\t操作错误!\n");return head;}p1=head->next;p2=p1;while(p1!=NULL){if(strcmp(p1->name,stu_name)==0){printf("\n\n你所删除的学生姓名为: %s\t学号为:%s\n",p1->name,p1->num);printf("\n\n确定为:y,取消为n\t:");i=getchar();while(!((i=='y')||(i=='Y')||(i=='n')||(i=='N'))){printf("\n\n输入错误!\t请重新输入:");i=getchar();}if((i=='y')||(i=='Y')){if(j==0){head->next=p1->next;/*删除头部接点*/}else{p2->next=p1->next;}printf("\n\n\t\t\t\t成功删除用户信息!\n\n\t\t\t按回车键继续...\n");free(p1);return head;}else{return head;}}j++;p2=p1;p1=p1->next;}printf("\n\n\t\t没有此用户记录信息!\n按回车键继续\n");getchar();system("cls");display(head);getchar();return head;}/*====================================================================删除学生信息(以学号为对象)====================================================================*/stu* delnum(stu *head,char *stu_num)/*根据学生学号删除用户信息*/{stu *p1,*p2;char i,j=0;system("cls");if(head->next==NULL){printf("\n\n\t\t没有存储学生信息!\n\n\t\t操作错误!\n");return head;}p1=head->next;p2=p1;while(p1->next!=NULL){if(strcmp(p1->num,stu_num)==0){printf("\n\n你所删除的学生姓名为: %s\t学号为:%s\n",p1->name,p1->num);printf("\n\n确定为:y,取消为n\t:");i=getchar();while(!((i=='y')||(i=='Y')||(i=='n')||(i=='N'))){printf("\n\n输入错误!\t请重新输入:");i=getchar();}if((i=='y')||(i=='Y')){if(j==0){head->next=p1->next;}else{p2->next=p1->next;}printf("\n\n\t\t\t\t成功删除用户信息!\n\n\t\t\t按回车键继续...\n");free(p1);return head;}elsereturn head;}p2=p1;p1=p1->next;j++;}printf("\n\n没有此用户信息!\n按回车键继续...\n");getchar();system("cls");display(head);getchar();return head;}/*====================================================================输出指定学生信息(以学生姓名为对象)====================================================================*/stu* checkname(stu *head,char *stu_name)/*输出指定学生的信息*/{stu *p1;system("cls");if(head==NULL){printf("\n\n\t\t没有存储学生信息!\t操作错误!\n");getchar();return head;}p1=head;while(p1->next!=NULL){if(strcmp(p1->name,stu_name)==0){printf("\n\n你所查找的学生信息如下\n");printf(" \n\n%s\t学号为:%s\n",p1->name,p1->num);printf("姓名\t学号\t\t %s\t %s\t %s\t%s\t平均分\n",\sc_name[0],sc_name[1],sc_name[2],sc_name[3]);printf("%s\t%s\t\t %d\t %d\t%d\t%d\t%d\n",\p1->name,p1->num,p1->score[0],p1->score[1],p1->score[2],p1->score[3],p1->average);getchar();return p1;}p1=p1->next;}printf("\n\n\t\t找不到相关用户信息!\n按回车键继续...\n");getchar();system("cls");display(head);getchar();return (stu*)NULL;}/*====================================================================输出指定学生信息(以学生学号为对象)====================================================================*/stu* checknum(stu *head,char *stu_num)/*输出指定学生学号的学生信息*/{stu *p1,*p2;p2=(stu*)malloc(sizeof(stu));system("cls");if(head==NULL){printf("\n\n\t\t没有存储学生信息!\t操作错误!\n");return head;}p1=head;while(p1->next!=NULL){if(strcmp(p1->num,stu_num)==0){printf("\n\n你所查找的学生信息如下\n");printf(" %s\t学号为:%s\n",p1->name,p1->num);printf("姓名\t学号\t\t %s\t %s\t %s\t%s\t平均分\n",\sc_name[0],sc_name[1],sc_name[2],sc_name[3]);printf("%s\t%s\t\t %d\t %d\t%d\t%d\t%d\n",\p1->name,p1->num,p1->score[0],p1->score[1],p1->score[2],p1->score[3],p1->average);getchar();return p1;}p1=p1->next;}printf("\n\n\t\t找不到相关用户信息!\n按回车键继续...\n");getchar();return (stu*)NULL;}/*====================================================================修改指定学生信息(以学生姓名为对象)====================================================================*/void changsc_name(stu *head,char *name)/*修改用户成绩*/{stu *p;char j=0;system("cls");p=checkname(head,name);if(p!=NULL){p->average=0;printf("\n\n请输入学生新的学号: ");scanf("%s",p->num);while(!cheknum(p->num)){printf("\n\n输入格式错误!请重新输入学号:\n ");scanf("%s",p->num);}do{printf("\n\n请输入学生成绩%s :",sc_name[j]);scanf("%d",&p->score[j]);while((100<p->score[j])||(p->score[j]<0)){printf("\n\n成绩格式出错!\n ");getchar();printf("\n\n请重新输入学生成绩: ");scanf("%d",&p->score[j]);}p->average+=p->score[j];j++;}while(j<sc_num);p->average=p->average/4;printf("\n\n\t\t用户数据更新完毕!\n请按回车键退出...\n");getchar();system("cls");display(head);getchar();}}/*==================================================================== 修改指定学生信息(以学生学号为对象)==================================================================== */void changsc_num(stu *head,char *num)/*修改用户成绩*/{stu *p2;char j=0;system("cls");p2=checknum(head,num);if(p2!=NULL){p2->average=0;printf("\n\n请输入学生姓名: ");scanf("%s",p2->name);while(!chekname(p2->name)){printf("\n\n输入格式错误!请重新输入学号: ");scanf("%s",p2->name);}do{printf("\n\n请输入学生成绩%s :",sc_name[j]);scanf("%d",&p2->score[j]);while((100<p2->score[j])||(p2->score[j]<0)){printf("\n\n成绩格式出错!\n ");getchar();printf("\n\n请重新输入学生成绩: ");scanf("%d",&p2->score[j]);}p2->average+=p2->score[j];j++;}while(j<sc_num);p2->average=p2->average/4;printf("\n\n\t\t用户数据更新完毕!请按回车键退出...\n");getchar();}}/*==================================================================== ==================================================================== ============================存储操作类函数========================== ==================================================================== ==================================================================== *//*==================================================================== 加载学生信息==================================================================== */stu* load(void)/*加载用户数据*/{FILE *fp;stu *p,*head,*p1;char i=0,j=0;fp=fopen(stu_msg,"r");rewind(fp);head=(stu*)malloc(sizeof(stu));p1=p=(stu *)malloc(sizeof(stu));while(fread(p,sizeof(stu),1,fp)==1){if(i==0){head->next=p;p1=p;}else{p1->next=p;p1=p;p1->next=NULL;}i++;p=(stu*)malloc(sizeof(stu));j++;}if(j==0){printf("\n\n\t\t\t没有数据信息可载入!\n");head=NULL;free(p);getchar();}fclose(fp);return head;}/*====================================================================显示学生信息====================================================================*/char disload()/*显示用户信息*/{FILE *fp;stu *p1;char i=0;p1=(stu*)malloc(sizeof(stu));if((fp=fopen(stu_msg,"r+"))==NULL)fp=fopen(stu_msg,"w+");rewind(fp);while(fread(p1,sizeof(stu),1,fp)==1){printf("%s\t%s\t %d\t %d\t%d\t%d\t%d\n",\p1->name,p1->num,p1->score[0],p1->score[1],p1->score[2],p1->score[3],p1->average);i++;//fread(p1,sizeof(stu),1,fp);}fclose(fp);if(i==0){printf("\n\t\t\t文件中不含学生信息!\n\t\t\t按回车键继续...\n");getchar();}else{printf("\n\t\t\t一共记录了%d名学生信息!\n\t\t\t按回车键继续...\n",i);getchar();}}/*==================================================================== 保存学生信息==================================================================== */char save(stu *head)/*保存用户数据*/{stu *p;FILE *fp;stu stt;char i=0;p=head->next;system("cls");clrtxt(stu_msg);fp=fopen(stu_msg,"w");rewind(fp);//if(head->next!=NULL){while(p!=NULL){fwrite(p,sizeof(stu),1,fp);p=p->next;i++;}if(i==0){printf("没有保存数据!\n");getchar();fclose(fp);return 0;}else{fclose(fp);return 1;}}else{fclose(fp);return 0;}fclose(fp);return 0;}/*==================================================================== 创建文本信息==================================================================== */char* creat_txt(char *username)/*根据用户名,创建一个用户文件*/{char name[20];FILE *fp;strcpy(name,"d:\\");strcat(name,username);strcat(name,".txt");fp=fopen(name,"w+");system("cls");if(fp!=NULL){//printf("\n\n文件路径为:%s\n\n",name);//printf("\n\n\t\t用户文件创建成功!\n\n\t\t请按回车键继续...\n");//getchar();fclose(fp);return name;}else{printf("\n\n\t\t无法创建用户文件!\n\n\t\t请按回车键继续...\n");getchar();fclose(fp);return name;}}/*====================================================================清除文本信息====================================================================*/FILE* chekuser(char *username)/*根据用户名,查找是否有此用户信息,若无,返回NULL*/ {}/*====================================================================清除文本信息====================================================================*/void clrtxt(char *str)/*清除文本信息*/{char clrmem[10];char semem[40];FILE *fp;int i=0,j=0;if((fp=fopen(str,"r"))==NULL){printf("\n\t无此文件!");getchar();}else{fclose(fp);fp=fopen(str,"w");memset(clrmem,'\0',sizeof(clrmem));rewind(fp);for(i=0;i<40;i++){if(fwrite(clrmem,sizeof(clrmem),1,fp)!=1){if(j==0){printf("\n\n\t\t文件清除失败!\n\n\t\t请按回车键继续...\n");getchar();break;}else{//printf("\n\n\t\t文件清除成功!\n\n\t\t请按回车键继续...\n");//getchar();break;}}elsej++;}fclose(fp);}}/*====================================================================用户登录信息====================================================================*/void setlogintime(void)/*记录用户登录时间*/{FILE *fp;int y,m,d,hour,min,sec;time_t T; // 一个可以包含时间信息的长整型struct tm *timeinfo;time( &T ); // 得到机器的日历时间if((fp=fopen(logtimemsg,"a+"))==NULL){fp=fopen(logtimemsg,"w");}time( &T ); // 得到机器的日历时间timeinfo = localtime( &T ); // 将日历时间转换为当地时间,timeinfo 是一个时间格式的指针y=timeinfo->tm_year + 1900; // 年份m=timeinfo->tm_mon + 1; // 月份d=timeinfo->tm_mday; // 日期hour=timeinfo->tm_hour;min=timeinfo->tm_min;sec=timeinfo->tm_sec;fwrite(userlogin,sizeof(userlogin),1,fp);fwrite(timeinfo,sizeof(struct tm),1,fp);//写入用户登陆信息printf("\n\n\n\t\t登陆时间为:\n\t\t%d年%d月%d日%d时%d分%d秒\n\n\n", y, m, d,hour,min,sec);fclose(fp);}/*====================================================================用户登录信息====================================================================*/void dislogintime(void)/*显示用户登录信息*/{FILE *fp;int y,m,d,hour,min,sec;struct tm *timeinfo;char name[10];int i=0;timeinfo=(struct tm*)malloc(sizeof(struct tm));fp=fopen(logtimemsg,"r+");if(fp==NULL){printf("\n\n\t\t找不到文件信息!\n\n\t\t按回车键继续...\n");getchar();}else{memset(name,'\0',sizeof(name));while(fread(name,sizeof(name),1,fp)==1){fread(timeinfo,sizeof(struct tm),1,fp);y=timeinfo->tm_year + 1900; // 年份insm=timeinfo->tm_mon + 1; // 月份d=timeinfo->tm_mday; // 日期hour=timeinfo->tm_hour;min=timeinfo->tm_min;sec=timeinfo->tm_sec;i++;printf("\n\t第%d次登陆时间为:%d年%d月%d日%d时%d分%d秒\t%s用户登录",i,y, m, d,hour,min,sec,name);memset(name,'\0',sizeof(name));}if(i==0)printf("\n没有记录用户登录时间!\n");getchar();free(timeinfo);fclose(fp);}}/*====================================================================用户登录信息====================================================================*/。
c语言课程设计学生信息管理系统一、教学目标本课程旨在通过学习C语言,使学生掌握学生信息管理系统的基本概念、设计方法和实现技巧。
具体目标如下:1.知识目标:学生应掌握C语言的基本语法、数据类型、运算符、控制结构、函数等基本知识。
学生应了解学生信息管理系统的需求分析、系统设计、编码实现、测试等基本过程。
2.技能目标:学生能够运用C语言编写简单的程序,解决实际问题。
学生能够独立完成学生信息管理系统的设计和实现。
3.情感态度价值观目标:学生应培养对计算机科学的兴趣和热情,形成良好的学习习惯和团队合作精神。
学生应理解编程不仅仅是一种技能,更是一种思考问题和解决问题的方式。
二、教学内容本课程的教学内容主要包括C语言的基本语法和编程方法,以及学生信息管理系统的设计和实现。
具体安排如下:1.C语言基本语法:数据类型、运算符、控制结构、函数等。
2.学生信息管理系统需求分析:系统功能、数据结构、界面设计等。
3.学生信息管理系统设计:模块划分、算法实现、接口设计等。
4.学生信息管理系统实现:编码、调试、测试等。
三、教学方法本课程采用多种教学方法,以激发学生的学习兴趣和主动性:1.讲授法:讲解C语言的基本语法和概念,学生信息管理系统的需求分析和设计方法。
2.案例分析法:分析实际案例,引导学生运用C语言解决实际问题。
3.实验法:学生动手编写代码,实现学生信息管理系统。
4.讨论法:分组讨论,促进学生之间的交流与合作。
四、教学资源本课程所需教学资源包括:1.教材:《C语言程序设计》等相关教材。
2.参考书:提供给学生额外的学习资料,以加深对C语言和编程的理解。
3.多媒体资料:PPT、视频教程等,用于辅助讲解和演示。
4.实验设备:计算机、编程环境等,用于学生动手实践。
五、教学评估本课程的评估方式包括以下几个方面:1.平时表现:通过课堂参与、提问、讨论等环节,评估学生的学习态度和积极性。
2.作业:布置适量的作业,评估学生的编程能力和对知识的理解程度。
*******************实践教学*******************兰州理工大学计算机与通信学院2010年春季学期计算机语言课程设计题目:学生信息管理系统专业班级:姓名:__ _________学号:_______ __指导教师:成绩:_________________目录摘要 .................................................................................... 错误!未定义书签。
前言 .................................................................................... 错误!未定义书签。
正文 .................................................................................... 错误!未定义书签。
1.问题描述..................................................................... 错误!未定义书签。
2.需求分析 (4)3.系统总体设计............................................................. 错误!未定义书签。
4.详细设计..................................................................... 错误!未定义书签。
5.系统测试 (8)6.软件使用说明书......................................................... 错误!未定义书签。
总结 .................................................................................... 错误!未定义书签。
C语言程序设计题目:学院教学信息管理系统课程设计内容用C语言编写具有以下功能的程序:1、输入:输入每一位教师信息,将其信息写入文件中。
2、显示:显示每位教师信息。
3、排序:按职工号或教学效果综合评分进行排序,并显示。
4、查找:完成按姓名或课程查找教师的相关记录,并显示。
5、修改:修改某一位教师的信息。
6、删除:删除某一位教师的信息。
一、需求分析经过对程序设计题目的分析可知,整个程序的设计实现大致分为九个模块,每一个模块对应一个函数。
在这些函数当中,添加教师数据函数,显示教师数据函数,查询教师信息函数,修改教师信息函数以及删除教师信息函数的实现严格按照题目的要求。
读取文件函数和保存信息函数对其它函数的实现起辅助作用,主函数及菜单函数控制程序的整体运行。
1.添加函数:主要实现程序最初运行时教师信息的录入以及其后的运行中教师信息的追加功能;2.显示函数:实现的是显示目前所有教师的记录信息;3.排序函数:允许按照教师职工号或教学效果综合评分对教师各项信息进行排序;4.查询函数:允许按照教师姓名或教师课程对教师的各项信息进行查询;5.修改函数:允许对某教师信息进行修改操作;6.删除函数:允许删除某教师信息;除上面介绍的功能之外,程序还具有菜单和退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。
每一位教师的记录都包含职工号、姓名,性别、职称、教授的上门课程和教学效果综合评分。
在程序当中,将教师记录类型定义为结构体类型,添加以及追加的教师信息直接写入E盘的teachers.txt文件中,其它函数每次对教师记录的访问,其数据来源都是teachers.txt文件,这样做不但可以保证教师数据的一致性,而且可以对教师数据进行永久保存,保证每次运行程序都可以采用原来的数据。
二、程序流程图三、源程序#include "stdafx.h"#include "stdio.h"#include <string.h>#include <stdlib.h>#include <windows.h>#include "conio.h"#define N 20struct teachers{unsigned long num;//职工号char name[N];//姓名char sex[N];//性别char title[N];//职称char lesson[N];//3门讲授课程名称int score;//教学效果综合评分};//结构体void menu();int reads(struct teachers tea[N]);//读取教师文件中的内容void save(struct teachers tea[N],int n);//输入保存数据void add();//添加教师信息void show();//显示教师信息void order_num();//按职工号进行排序void order_score();// 按教学效果综合评分进行排序void query_name();//按姓名查找教关信息void query_lesson();//按课程查找教师信息void modify();//修改教师信息void backspace();//删除教师信息void quit();//退出系统.....................................................函数说明void main(){system("color 57");printf(" *************************学院信息管理系统欢迎您 ***********************\n");printf(" ==============================================================\n"); printf(" ┃**********************************************************┃\n");printf(" ┃***____________________________________________________***┃\n"); printf(" ┃***|**************************************************|***┃\n");printf(" ┃***|**** ****|***┃\n");printf(" ┃***|**** 欢迎使用学院信息管理系统 ****|***┃\n");printf(" ┃***|**** ****|***┃\n");printf(" ┃***|**** ****|***┃\n");printf(" ┃***|**** 制作人刘文浩 ****|***┃\n");printf(" ┃***|**** ****|***┃\n");printf(" ┃***|**** 2018.07.01 ****|***┃\n");printf(" ┃***|**** ****|***┃\n");printf(" ┃***|**************************************************|***┃\n");printf(" ┃***----------------------------------------------------***┃\n");printf(" ┃**********************************************************┃\n");printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");printf("\n 请按任意键进入系统 \n");getch();int n;while(1){menu();printf("\n 请输入您要选择的操作序号,按回车键确认:");scanf("%d",&n);switch(n){case 1: add();break;case 2: show();break;case 3: order_num();break;case 4: order_score();break;case 5: query_name();break;case 6: query_lesson();break;case 7: modify();break;case 8: backspace();break;case 0: quit();break;default: printf("输入错误,请输入列表中存在的序号!\n ");}}}void menu(){ printf("\n");printf("\n");printf("\n");printf(" ************************* 学院教学信息管理系统************************ \n");printf(" ============================================================================\n");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(" || 0 退出系统 ||\n");printf(" ******************************************************************************\n");printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");}//.........................................................................................................主菜单int reads(struct teachers tea[N]) // 读取教师文件中的信息{FILE *fp;int i=0;if((fp=fopen("d:\\teachers.txt","r"))==NULL){printf("文件打开失败!\n");return 0;}else{for(i=0;!feof(fp);i++)fscanf(fp,"%lu %s %s %s %s %d\n",&tea[i].num,&tea[i].name,&tea[i].sex,&tea[i].title,&tea[i].lesson,&tea[i].score);}fclose(fp);return i;}void add()/*添加教师信息*/{FILE *fp;int n,i;struct teachers tea;if((fp=fopen("d:\\teachers.txt","a"))==NULL) //如果文件已经存在,可以追加教师信息{if((fp=fopen("d:\\teachers.txt","w"))==NULL) // 文件不存在时,创建新文件,输入教师信息{printf("文件打开失败!\n");return;}}printf("请输入要添加的教师的数量,按回车键确认:");scanf("%d",&n);for(i=0;i<n;i++){printf("\n请输入第%d个教师的工号、姓名,用空格分开,并按回车键确认:\n",i);scanf("%lu%s",&tea.num,&);printf("\n请输入第%d个教师的性别、职称、讲授课程名称、教学效果综合评分,用空格分开,并按回车键确认:\n",i);scanf("%s%s%s%d",&tea.sex,&tea.title,&tea.lesson,&tea.score);fprintf(fp,"%lu %s %s %s %s %d\n",tea.num,,tea.sex,tea.title,tea.lesson,tea.score);}fclose(fp);printf(".............................................................》保存成功!\n");printf(".............................................................》请按任意键回到主菜单\n");getch();}void show()/*显示教师信息*/{struct teachers tea[N];int i,n;n=reads(tea);printf("*********************所有的教师信息如下************************\n\n");printf(" 序号 || 职工号 || 姓名 || 性别 || 职称 || 课程 || 评分 \n");printf("***************************************************************\n");for(i=0;i<n;i++)printf("\n%3d %lu %4s %1s %5s %20s %3d\n",i+1,tea[i].num,tea[i].name,tea[i].sex,tea[i].title ,tea[i].lesson,tea[i].score); printf("***************************************************************\n");printf(".............................................................》显示成功!\n");printf(".............................................................》请按任意键回到主菜单\n");getch();}void order_num() //按教工号排序教师相关记录{struct teachers tea[N];int z=1;int i,n,j;int t;unsigned long m[20];n=reads(tea);for(i=0;i<n;i++){m[i]=tea[i].num;}for(i=0;i<n-1;i++)for(j=0;j<n-1;j++)if(m[j]>m[j+1]){t=m[j];m[j]=m[j+1];m[j+1]=t;}printf(" 序号 || 职工号 || 姓名 || 性别 || 职称 || 课程 || 评分 \n");printf("***************************************************************\n");for(i=0;i<n;i++){for(j=0;j<n;j++)if(tea[j].num==m[i]){printf("\n%3d %lu %4s %1s %5s %20s %3d\n",z++,tea[j].num,tea[j].name,tea[j].sex,tea[j].title ,tea[j].lesson,tea[j].score);}}printf("***************************************************************\n");printf("............................................................》排序成功!\n");printf("...........................................................》请按任意键回到主菜单\n");getch();}void order_score() //按教学综合评分排序教师信息{struct teachers tea[N];int z=1;int i,n,j;int m[20],t;n=reads(tea);for(i=0;i<n;i++){m[i]=tea[i].score;}for(i=0;i<n-1;i++)for(j=0;j<n-1;j++)if(m[j]<m[j+1]){t=m[j];m[j]=m[j+1];m[j+1]=t;}printf(" 序号 || 职工号 || 姓名 || 性别 || 职称 || 课程 || 评分 \n");printf("***************************************************************\n");for(i=0;i<n;i++){for(j=n;j>=0;j--)if(tea[j].score==m[i]){printf("\n%3d %lu %4s %1s %5s %20s %3d\n",z++,tea[j].num,tea[j].name,tea[j].sex,tea[j].title ,tea[j].lesson,tea[j].score);}}printf("***************************************************************\n");printf("............................................................》排序成功!\n");printf("...........................................................》请按任意键回到主菜单\n");getch();}void query_name() // 按教师姓名对教师信息查询{struct teachers tea[N];char name[N];int i,n;bool flag=0;n=reads(tea);printf("\n请输入待查询的教师姓名,按回车键确认:\n");scanf("%s",&name);for(i=0;i<n;i++){if(strcmp(name,tea[i].name)==0){printf(" 序号 || 职工号 || 姓名 || 性别 || 职称 || 课程 || 评分 \n");printf("***************************************************************\n");printf("\n%3d %lu %4s %1s %5s %20s %3d\n",i+1,tea[i].num,tea[i].name,tea[i].sex,tea[i].title ,tea[i].lesson,tea[i].score);printf("***************************************************************\n");printf(".............................................................》查询成功!\n");printf(".............................................................》请按任意键回到主菜单\n");flag=1;getch();}}if(flag==0){printf("\n.............................................................》未找到相关信息!\n");printf(".............................................................》请按任意键回到主菜单\n");getch();}}void query_lesson() // 按教师课程对教师信息查询{struct teachers tea[N];char lesson[N];int i,n;bool flag=0;n=reads(tea);printf("\n请输入待查询的教师课程,按回车键确认:\n");scanf("%s",&lesson);for(i=0;i<n;i++){if(strcmp(lesson,tea[i].lesson)==0){printf(" 序号 || 职工号 || 姓名 || 性别 || 职称 || 课程 || 评分 \n");printf("***************************************************************\n");printf("\n%3d %lu %4s %1s %5s %20s %3d\n",i+1,tea[i].num,tea[i].name,tea[i].sex,tea[i].title ,tea[i].lesson,tea[i].score);printf("***************************************************************\n");printf(".............................................................》查询成功!\n");printf(".............................................................》请按任意键回到主菜单\n");flag=1;getch();}}if(flag==0){printf("\n.............................................................》未找到相关信息!\n");printf(".............................................................》请按任意键回到主菜单\n");getch();}}void modify()//修改教师信息{struct teachers tea[N];FILE *fp;fp=fopen("d:\\teachers.txt","ab");int i,n;bool flag=0;n=reads(tea);char m[N];printf("请输入要修改的老师的名字:");scanf("%s",&m);for(i=0;i<n;i++)fread(&tea[i],sizeof(struct teachers),1,fp);for(i=0;i<n;i++){if(strcmp(tea[i].name,m)==0){printf("这是此老师原来的信息:\n");printf(" 序号 || 职工号 || 姓名 || 性别 || 职称 || 课程 || 评分 \n");printf("***************************************************************\n");printf("\n%3d %lu %4s %1s %5s %20s %3d\n",i+1,tea[i].num,tea[i].name,tea[i].sex,tea[i].title ,tea[i].lesson,tea[i].score);printf("***************************************************************\n");printf("请输入新信息:\n");printf("\n请输入教师的工号、姓名,用空格分开,并按回车键确认:\n");scanf("%lu%s",&tea[i].num,&tea[i].name);printf("\n请输入教师的性别、职称、讲授课程名称、教学效果综合评分,用空格分开,并按回车键确认:\n");scanf("%s%s%s%d",&tea[i].sex,&tea[i].title,&tea[i].lesson,&tea[i].score);fclose(fp);fp=fopen("d:\\teachers.txt","w");fclose(fp);fp=fopen("d:\\teachers.txt","ab");for(i=0;i<n;i++){fprintf(fp,"%lu %s %s %s %s %d",tea[i].num,tea[i].name,tea[i].sex,tea[i].title,tea[i].lesson,tea[i].score);fprintf(fp,"\n");}fclose(fp);flag=1;printf(".............................................................》修改成功!\n");printf(".............................................................》请按任意键回到主菜单\n");getch();}}if(flag==0){printf("\n.............................................................》未找到相关信息!\n");printf(".............................................................》请按任意键回到主菜单\n");getch();}}void backspace()//删除教师信息{struct teachers tea[N];FILE *fp;fp=fopen("d:\\teachers.txt","ab");int i,n;bool flag=0;n=reads(tea);char m[N];printf("请输入要删除的老师的名字:");scanf("%s",&m);for(i=0;i<n;i++)fread(&tea[i],sizeof(struct teachers),1,fp);for(i=0;i<n;i++){if(strcmp(tea[i].name,m)==0){tea[i]=tea[i+1];n--;}fclose(fp);fp=fopen("d:\\teachers.txt","w");fclose(fp);fp=fopen("d:\\teachers.txt","ab");for(i=0;i<n;i++){fprintf(fp,"%lu %s %s %s %s %d",tea[i].num,tea[i].name,tea[i].sex,tea[i].title,tea[i].lesson,tea[i].score);fprintf(fp,"\n");}fclose(fp);flag=1;printf(".............................................................》删除成功!\n");printf(".............................................................》请按任意键回到主菜单\n");getch();}if(flag==0){printf("\n.............................................................》未找到相关信息!\n");printf(".............................................................》请按任意键回到主菜单\n");getch();}}void quit() //退出系统{char a;printf("你真的想退出学院教学信息管理系统么?\n");printf(" 是(Y)/否(N) \n");scanf("%c",&a);getchar();if(a=='Y'||a=='y'){printf("*******************************谢谢使用!*******************************\n");printf("\n 请按任意键退出系统 \n");exit(0);}}。
中北大学程序设计实训说明书学院、系:软件学院专业:软件工程学生姓名:学号:1314010xxx 设计题目:某学院教学信息管理系统起迄日期:2014年11月21日~2015年1月17日指导教师:何志英2015年1月10日一、选题要求题目一:某学院教学信息管理系统功能:1、每一条记录包括一位教师的职工号、姓名、职称、性别、3门主讲课程(课程名称、开课学期、课程性质(学位与非学位课)和教学效果),教学效果综合评分。
2、输入功能:可以一次完成若干条记录的输入。
3、显示功能:完成全部教师记录的显示。
4、查找功能:完成按姓名或课程查找教师的相关记录,并显示。
5、排序功能:按职工号或教学效果综合评分进行排序。
6、插入功能:按教学效果综合评分高低插入一条教师记录。
7、将教师记录存在文件中。
8、应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观!要求:1、用C语言实现系统;2、利用结构体数组实现教学信息的数据结构设计;3、系统具有增加,查询,插入,排序等基本功能;4、系统的各个功能模块要求用函数的形式实现;5、将教学信息存在文件中。
考试题目要求:1、按教师性别统计统计评分的总算2、删除一个函数,程序仍能正常运行二、程序设计方法及主要函数介绍程序设计方法1.数据结构的设计:程序要求文档中要求使用结构体数组完成设计,每一条记录包括一位教师的职工号、姓名、职称、性别、3门主讲课程(课程名称、开课学期、课程性质(学位与非学位课)和教学效果),教学效果综合评分。
数据结构设计如下:typedef struct Course{//课程的定义与描述char courseName[40];//课程名称int semester;//开课学期char type[8];//课程性质char teceff;//教学效果}Course;typedef struct Teacher{//教师的定义与描述char name[8];//姓名int num;//职工号char sex[2];//性别int tecscore;//教学效果综合评分char position[8];//职称Course course[3];//3门主讲课程}Teacher;2.主函数与其他函数的关系:3.结构化的程序设计方法将实用功能封装在每一个子函数中,主函数通过调用子函数来实现相对应的功能。
体现了“自顶向下,逐步求精”的结构化程序设计思想。
4.“高内聚,低耦合”的程序设计原则将各个使用功能封装在函数中来让主函数调用,而不是将所有实用功能聚集在主函数中,使得各个模块相对独立,耦合性得以降低,有利于程序的维护。
主要函数介绍:1.以卡片形式输出全部教师信息注:由于版面原因,输出函数显得有些乱,但是这并不影响程序的运行结果,真实的运行结果是很整齐的。
(下图是DevC++V5.5.3版本下的编码界面)void PrintInfor(Teacher T[]){//输出全部教师信息(以卡片形式)printf("--------------------------------------------------------------------------------");printf("|所有教师记录|");printf("-------------------------------------------------------------------------------+");printf("|全院现有在职教师%d名,全部信息如下|",TeacherNum);printf("-------------------------------------------------------------------------------+\n\n");for(int i=0;i<TeacherNum;++i){printf("+------+---------------+----+------------+----+------+------+------------------+");printf("|职工号|%3d|姓名|%8s|性别|%s|职称|%8s |",T[i].num,T[i].name,T[i].sex,T[i].position);printf("+------+---+-----------+----+------------+----+------+------+------------------+");printf("|主讲课程1|课程名|%-40s |",T[i].course[0].courseName);printf("+----------+-----------+----------+------------------+------------+------------+");printf("|学期|%d|课程性质|%8s|教学效果|%c |",T[i].course[0].semester,T[i].course[0].type,T[i].course[0].teceff);printf("+----------+-----------+----------+------------------+------------+------------+");printf("|主讲课程2|课程名|%-40s |",T[i].course[1].courseName);printf("+----------+-----------+----------+------------------+------------+------------+");printf("|学期|%d|课程性质|%8s|教学效果|%c |",T[i].course[1].semester,T[i].course[1].type,T[i].course[1].teceff);printf("+----------+-----------+----------+------------------+------------+------------+");printf("|主讲课程3|课程名|%-40s |",T[i].course[2].courseName);printf("+----------+-----------+----------+------------------+------------+ ------------+");printf("|学期|%d|课程性质|%8s|教学效果|%c |",T[i].course[2].semester,T[i].course[2].type,T[i].course[2].teceff);printf("+----------+-----+-----+----------+------------------+------------+------------+");printf("|教学效果综合评分|%3d |",T[i].tecscore);printf("+----------------+-------------------------------------------------------------+\n\n");system("PAUSE");//输完一个教师信息,等待用户查看确认,确认无误后再打印下一教师的相关信息}//for}//PrintInfor2.对教师信息排序void Sort_N(Teacher T[],int n){//当n=1时按职工号排序,当n=2时按教学效果综合评分排序if(n==1){//按职工号排序Teacher temp;for(int i=0;i<TeacherNum-1;i++){//冒泡法排序for(int j=0;j<TeacherNum-1-i;j++)if(T[j+1].num<T[j].num){temp=T[j];T[j]=T[j+1];T[j+1]=temp;}//if}//forprintf("排序结果如下:\n");for(int i=0;i<TeacherNum;i++){printf("%8s[%d]",T[i].name,T[i].num);}//forprintf("\n");}//ifelse{//按教学效果综合评分排序Teacher temp;for(int i=0;i<TeacherNum-1;++i){//冒泡法排序for(int j=0;j<TeacherNum-1-i;++j)if(T[j+1].tecscore<T[j].tecscore){temp=T[j];T[j]=T[j+1];T[j+1]=temp;}//if}//forfor(int i=0;i<TeacherNum;i++){printf("\t\t\t第%d名:%-8s分数:%3d\n",i+1,T[i].name,T[i].tecscore);}//for}//else}//Sort_N3.按教学效果综合评分高低插入一条教师记录由于程序要求要按照教学效果综合评分高低进行插入操作,故教师信息必须按一定顺序排列,但是在执行该操作之前不能保证用户已经执行了相应的排序操作,故需要再执行一次排序操作,以保证接下来的程序能够正常运行插入信息的算法大致描述如下:在操作之前,教师的教学效果综合评分已经按照从小到大的顺序排列。
先确定插入位置,如需对数据移动则进行移动操作,最后将待插记录复制到插入位置。
插入位置有两种:A.在所有教师信息之后插入:当该教师分数大于所有教师的分数时,直接将该教师信息复制在最后一个教师后面的结构体中,无需进行移动,此时的基本操作为数据的复制。
B.在开头或者其他教师之前插入:当该教师分数满足以下表达式:min<=tecscore<max时,使用for循环找到其插入位置的数组元素下标i,然后将该位置及其后面的元素全部后移一位,将待插入教师的信息复制到插入位置。