沈阳航空航天大学课程设计任务书系:航空宇航工程学院专业:飞行器动力工程班级:学号:201304 题目:学生社会实践管理系统一、课程设计时间2014~15第1学期第1周,即9月1日~9月5日,共计1周,20学时。
二、课程设计内容用C语言编写程序完成以下任务:(1)输入学生的基本信息和具体学期的社会实践情况(每个学生至少有3个学期的信息),并保存在data25.txt文件中。
(2)根据学号查询学生指定学期的社会实践情况和数量(如某学期有2次社会实践,显示2次社会实践的信息及数量2)。
(3)建议使用freadfwrite函数访问文件。
三、课程设计要求1.贯彻结构化程序设计思想。
2.用户界面友好,功能明确,操作方便;可以加以其它功能或修饰。
3.菜单至少应包括“学生信息录入”、“根据学号查询”、“退出”3项。
4.代码应适当缩进,并给出必要的注释,以增强程序的可读性。
四、指导教师和学生签字指导教师:________ 学生签名:________五、成绩六、教师评语目录一、需求分析 (1)二、设计分析 (3)三、主要界面截图 (5)四、技术要点 (7)五、个人总结 (8)六、参考文献 (8)七、源程序 (9)一、需求分析根据任务书给定的“课程设计内容”和“课程设计要求”作如下的需求分析。
整个程序的设计实现大致分为四个模块,其中每一个模块对应一个函数,他们的功能分别是:学生信息录入,信息查询,退出。
(1)学生信息录入:允许用户输入学号、姓名和假期实践情况。
对用户由于疏忽录入的非法数据,能够及时提示并更正。
(2)数据保存:对于输入的数据,或被修改的数据应该保存到data25.txt文件中,实现永久存储。
(3)信息查询:当输入学号时,可查询到该学生的学号、姓名、假期实践情况和数量每一个学生记社会实践记录都包含姓名、学号和实践情况,在程序当中,将学生记录类型定义为结构体类型,添加以及追加的学生信息直接写入data25.txt文件中,其他函数每次对学生记录的访问,其数据来源都是data25.txt文件,这样做不但可以保证学生数据的一致性,而且可以对学生数据进行永久保存,保证每次运行程序都可以采用原来的数据。
二、设计分析主要有5个功能模块,每个模块对应一个C语言自定义函数。
这些函数原型及其功能简述如下:1、程序总体结构图(传统流程图或N-S框图)图1程序总体结构图2、主要功能模块框图(传统流程图或N-S框图)(1)学生信息录入图2 学生信息录入2)查询学生数据read ()三、主要界面截图图一:主要界面图二:输入学生信息图四:查询学生信息四、技术要点(对本程序贡献较大的C语言知识点;重要算法的设计与实现)1、结构体的应用定义了结构体用来描述学生的姓名、学号、班级以及三门课程成绩。
具体的定义如下:typedef struct{char name[10];/*姓名*/int num;/*学号*/char date[100];/*学生实践情况,数量*/}stu;所定义的结构体主要用于定义数组。
2、学生信息录入学生信息录入,此时文件要以读写方式或追加的方式打开,这样才可以保证以前已经存在的数据不丢失。
具体的程序段如下: FILE *fp;/*定义一个文件指针*/stu xs;if((fp=fopen("\\data25.txt","ab"))==NULL) {printf("不能打开指定文件!\n");exit(0);}printf("\n录入格式: 姓名学号实践情况,数量当输入姓名为ps结束输入\n");while(1){scanf("%s",);/*输入姓名*/if(strcmp(,"ps")==0) break;scanf("%d%s",&xs.num,xs.date);fwrite(&xs,sizeof(stu),1,fp);}fclose(fp);3、信息查询通过学生的学号对学生的社会实践情况及实践数量进行查询。
可以使老师更好的掌握学生的社会实践情况,使老师对学生的社会实践管理更方便更全面。
具体的程序段如下:void seek()/*信息查询*/{FILE *fp;/*定义一个文件指针*/stu xs;int number;printf("\n请输入学号:");scanf("%d",&number);/*输入学号*/if((fp=fopen("\\data25.txt","rb"))==NULL) {printf("不能打开指定文件!\n");exit(0);}while(!feof(fp)){fread(&xs,sizeof(stu),1,fp);if(feof(fp))break;if(xs.num==number){printf("姓名学号实践情况,数量\n");printf("%s\t%d\t%s%\t\n",,xs.num,xs.date);}}fclose(fp);return;}五、个人总结通过5天的课程设计,首先体会到了编程工作者的辛苦以及编程的复杂程度。
通过本次一周的课程设计,自己在C语言方面又不小进步!不仅对这门课程产生了更浓厚的兴趣,而且对于这门语言的了解有了个质的飞跃,由以前简单的理论了解转变成了实质上的应用。
首先是对文件的方面有了更深的了解,因为这次的设计任务主要应用的是文件方面的知识,还有结构体的一些知识例如结构体比较的用法。
除此之外,我了解到同一程序要求可以用不同的语句来实现,而我们应该尽量使用一些比较高级的语句,一来可以减少语句数,另外可以减少一些不必要的错误。
六、参考文献(参考的书籍或互联网资源)1 谭浩强.C程序设计.北京:清华大学出版社,20052 全国计算机等级考试实用应试教程北京:电子工业出版社20093 百度文库百度知道七、源程序#include"stdio.h"#include"string.h"#include"conio.h"#include"stdlib.h"#define N 20typedef struct{char name[10];/*姓名*/int num;/*学号*/char date[100];}stu;void menu(){printf("****************************************************\n"); printf("* * 1. 输入学生信息* *\n"); printf("* * 2. 查找学生信息* *\n"); printf("* * 0. 退出* *\n"); printf("****************************************************\n"); printf("请选择:");}void input(){FILE *fp;/*定义一个文件指针*/stu xs;if((fp=fopen("\\data25.txt","ab"))==NULL) {printf("不能打开指定文件!\n");exit(0);}printf("\n录入格式: 姓名学号实践情况,数量当输入姓名为ps结束输入\n");while(1){scanf("%s",);/*输入姓名*/if(strcmp(,"ps")==0) break;scanf("%d%s",&xs.num,xs.date);fwrite(&xs,sizeof(stu),1,fp);}fclose(fp);}void output(){FILE *fp;/*定义一个文件指针*/stu xs;system("cls");if((fp=fopen("\\data25.txt","rb"))==NULL) {printf("不能打开指定文件!\n");exit(0);}printf("姓名学号实践情况,数量\n");while(!feof(fp)){fread(&xs,sizeof(stu),1,fp);if(feof(fp)) break;printf("%s\t%d\t%s%\t\n",,xs.num,xs.date);}fclose(fp);return;}//void seek()/*信息查询*/{FILE *fp;/*定义一个文件指针*/stu xs;int number;printf("\n请输入学号:");scanf("%d",&number);/*输入学号*/if((fp=fopen("\\data25.txt","rb"))==NULL) {printf("不能打开指定文件!\n");exit(0);}while(!feof(fp)){fread(&xs,sizeof(stu),1,fp);if(feof(fp))break;if(xs.num==number){printf("姓名学号实践情况,数量\n");printf("%s\t%d\t%s%\t\n",,xs.num,xs.date); }}fclose(fp);return;}void main(){char ch;while(1){menu();ch=getchar();if(ch=='0')break;switch(ch){case '1':input();break;case '2':seek();break;return;}}printf("\n欢迎下次使用!\n");}。