14信管01班学生表现报告单
学期:20##-20##-1 报告人:周水开 报告时间:20##年01月17日
第二篇:46学生信息管理
沈阳航空工业学院
课程设计任务书
院系:航空宇航工程学院 专业: 飞行器设计 班级:7403302 学号:200704033046 题目:学生信息管理2
一、课程设计时间
2008~9第2学期第1周,共计1周,20学时。
二、课程设计内容:用C语言编写程序完成以下任务:
学生基本信息包括学号,姓名,计算机成绩,请编程序,实现如下的功能:
(1)创建链表存放学生信息,并将学生信息保存到students.txt文件中。
(2)显示学生信息。
(3)修改指定学号的学生成绩并可存盘。
三、课程设计要求:
1.贯彻结构化程序设计思想。
2.用户界面友好,功能明确,操作方便;可以加以其它功能或修饰。
3.用户界面中的菜单至少应包括“创建链表”、“显示学生信息”、“学生成绩修改”、出”4项。
4.代码应适当缩进,并给出必要的注释,以增强程序的可读性。
四、指导教师和学生签字
指导教师:________ 学生签名:________
五、说明书成绩
六、教师评语
“退
沈 阳 航 院 设 计 用 纸
目录
一、需求分析 .................................................................. 2
二、程序流程图 .............................................................. 2
三、核心技术的实现说明及相应程序段 ...................... 5
四、个人总结 ................................................................. 10
五、参考文献 ................................................................. 10
六、完整的源程序 ......................................................... 10
I
沈 阳 航 院 设 计 用 纸
一、需求分析
经过对程序设计题目的分析可知,整个程序的设计实现大致分为六个模块,其中每一个模块对应一个函数,它们的功能分别是:添加学生数据函数,删除数据函数,排序函数,成绩查询函数,更改学生数据函数以及显示学生信息函数。在这些函数当中,前四个函数的实现严格按照题目的要求,而后面的两个函数属于附加功能。
1、创建链表 主要实现程序最初运行时学生数据的录入
2、显示学生信息 实实现的是显示目前所有的有效学生记录信息。
3、更改数据函数 可以实现对学生记录中除学号以外的信息进行修改;
除上面介绍的功能之外,程序还具有退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。
每一个学生记录都包含学号、姓名,以及计算机成绩,在程序当中,将学生记录类型定义为结构体类型,添加的学生信息直接写入D盘的student.txt文件中,其它函数每次对学生记录的访问,其数据来源都是student. txt文件,这样做不但可以保证学生数据的一致性,而且可以对学生数据进行永久保存,保证每次运行程序都可以采用原来的数据。
二、程序流程图
1、程序总体结构图
2
沈 阳 航 院 设 计 用 纸
图1程序总体结构图
2.具体功能框图
(1)创建学生信息链表add
图2建立链表
3
沈 阳 航 院 设 计 用 纸
(2)显示学生信息show()
图2 显示学生信息
(3)修改学生信息change()
图3 修改学生信息
4
沈 阳 航 院 设 计 用 纸
三、核心技术的实现说明及相应程序段
本程序主要由三个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其他函数来实现要求的所有功能。在这些函数当中,建立链表函数、信息显示、修改学生信息是程序中较为核心的部分,下面分别进行说明。
1、建立链表函数
建立链表分为两种情况,其一是在学生文件(student.txt)不存在的情况下,首先由程序创建一个新文件,并将录入的学生信息写入该文件当中;其二是在学生文件(student.txt)已经存在的情况下,此时文件要以读写方式或追加的方式打开,这样才可以保证以前已经存在的数据不丢失。具体的程序段如下:
void add()
{ FILE *fp;
if((fp=fopen("student.txt","w"))==NULL)
5 {printf("不能打开文件!\n"); exit(0); } int n=0; struct student *head; struct student *p1,*p2;
沈 阳 航 院 设 计 用 纸
p1=p2=(struct student *)malloc(LEN); printf("输入学号、姓名、计算机成绩,空格隔开,以0 0 0结束:\n");
scanf("%d %s %f",&p1->num,p1->name,&p1->score); head=NULL;
while(p1->num!=0)
{ fprintf(fp,"%d %s %f\n",p1->num,p1->name,p1->score);
n=n+1; if(n==1) head=p1; else p2->next=p1; p2=p1; p1=(struct student *)malloc(LEN);
scanf("%d %s %f",&p1->num,p1->name,&p1->score);
}
2.学生信息显示
该函数也分为两种情况,一是存在student.txt文件,使用个体getchar和putchar现实到屏幕上。另外的是不存在student.txt文件,显示不
6 } p2->next=NULL; fclose(fp);
沈 阳 航 院 设 计 用 纸
能打开文件。具体的程序段如下:
void show()
{
FILE *fp;
if((fp=fopen("student.txt","r"))==NULL)
}
3.修改学生信息
先输入要修改的学生的学号,接着判断student.txt文件是否有此学号,有的话就输入要修改的学生姓名,计算机成绩。然后用写的方式打开student.txt文件,使student.txt文件刷新,将新的学生姓名,计算机成绩写入student.txt文件。如果没有此学号,那么输出“无此学生信息!” 具体的程序段如下:
void change()
7 {printf("不能打开文件!\n"); } else {printf("学号 姓名 计算机成绩\n"); while(!feof(fp)) putchar(getc(fp)); fclose(fp); }
沈 阳 航 院 设 计 用 纸
{
struct student stu[N],change;
printf("输入要修改的学生学号:");
scanf("%d",&change.num);
FILE *fp;
int i=0,j,n;
if((fp=fopen("student.txt","r"))==NULL)
{ printf("文件打开失败!\n");
return;
}
else
{
for(i=0;!feof(fp);i++)
fscanf(fp,"%d%s%f",&stu[i].num,stu[i].name,&stu[i].score);
}
fclose(fp);
n=i;
for(i=0;i<n;i++)
if(change.num==stu[i].num)
8 break;
沈 阳 航 院 设 计 用 纸
if(i>=n)
{printf("无此学生信息!\n");
return;
}
printf("\n请输入更改后学生的姓名和计算机成绩,按回车键确认:\n");
scanf("%s%f",change.name,&change.score);
stu[i]=change;
if((fp=fopen("student.txt","w"))==NULL)/*更新文件*/
{printf("打开文件失败!");
return;
}
j=1;
for(i=0;i<n-1;i++)
{ fprintf(fp,"%d %s %f\n",stu[i].num,stu[i].name,stu[i].score);
}
fclose(fp);
}
9
沈 阳 航 院 设 计 用 纸
四、个人总结
经过这一个星期的课程设计让我深深知道什么是课程设计,我觉得要想自己真正的做出比较好的课设,不仅要对老师所讲的内容理解透彻,还要对课本的主要内容深入学习,除了这些还不够,还要有老师的指导和程序例题的参考。当然在这几天里同学之间的帮助也是比不可少的,要谢谢杨俊堂同学,是他帮助我完成了比较复杂的程序段的编写。通过其他资源也可能更快的了解做题思路。其实学C语言要做到孰能生巧,面对问题要有解题的算法。通过这次课设让我对C语言产生了兴趣,对以后的学习会很有帮助的。
五、参考文献
1 谭浩强.C程序设计.北京:清华大学出版社,2007
六、完整的源程序
#include <stdlib.h>
#include <stdio.h>
#include <malloc.h>
#define NULL 0
#define N 20
struct student
{
10 int num;
沈 阳 航 院 设 计 用 纸
};
#define LEN sizeof(struct student) void menu();
void add();
void show();
void change();
void main()
{
while(1) char name[10]; float score; struct student *next;
{
int choice; menu(); printf("选择所需操作序号:"); scanf("%d",&choice); switch(choice)
{
case 1:add();break; case 2:show();break; case 3:change();break;
11
沈 阳 航 院 设 计 用 纸
case 4:exit(0);
default:printf("\n请输入存在的序号!\n");
}
}
}
void menu()
{
printf("**************************学生成绩***************************\n");
printf(" 1.创建链表 \n"); printf(" 2.显示学生信息\n"); printf(" 3.学生成绩修改\n"); printf(" 4.退出\n");
}
void add()
{ FILE *fp;
if((fp=fopen("student.txt","w"))==NULL)
{printf("不能打开文件!\n");
exit(0);
12 管理
沈 阳 航 院 设 计 用 纸
} int n=0; struct student *head; struct student *p1,*p2; p1=p2=(struct student *)malloc(LEN); printf("输入学号、姓名、计算机成绩,空格隔开,以0 0 0结束:\n");
scanf("%d %s %f",&p1->num,p1->name,&p1->score); head=NULL;
while(p1->num!=0)
{ fprintf(fp,"%d %s %f\n",p1->num,p1->name,p1->score);
n=n+1; if(n==1) head=p1; else p2->next=p1; p2=p1; p1=(struct student *)malloc(LEN);
scanf("%d %s %f",&p1->num,p1->name,&p1->score);
13 } p2->next=NULL; fclose(fp);
沈 阳 航 院 设 计 用 纸
}
void show()
{
FILE *fp;
if((fp=fopen("student.txt","r"))==NULL)
}
void change()
{
struct student stu[N],change;
printf("输入要修改的学生学号:"); scanf("%d",&change.num); FILE *fp;
int i=0,j,n;
14 {printf("不能打开文件!\n"); } else {printf("学号 姓名 计算机成绩\n"); while(!feof(fp)) putchar(getc(fp)); fclose(fp); }
沈 阳 航 院 设 计 用 纸
if((fp=fopen("student.txt","r"))==NULL)
{ printf("文件打开失败!\n");
return;
}
else
{
for(i=0;!feof(fp);i++)
fscanf(fp,"%d%s%f",&stu[i].num,stu[i].name,&stu[i].score);
}
fclose(fp);
n=i;
for(i=0;i<n;i++)
if(change.num==stu[i].num)
break;
if(i>=n)
{printf("无此学生信息!\n");
return;
}
printf("\n请输入更改后学生的姓名和计算机成绩,按回车键确认:\n");
15
沈 阳 航 院 设 计 用 纸
scanf("%s%f",change.name,&change.score);
stu[i]=change;
if((fp=fopen("student.txt","w"))==NULL)/*更新文件*/
{printf("打开文件失败!");
return;
}
j=1;
for(i=0;i<n-1;i++)
{ fprintf(fp,"%d %s %f\n",stu[i].num,stu[i].name,stu[i].score);
}
fclose(fp);
}
16