学生学籍信息管理系统 1

C 语言课程设计 综合实习报告

题目:学籍信息管理系统 姓名: 黄凯 学号:[1**********] 班级号: 052081 院(系):工程学院 专业: 土木工程 指导教师: 曹弘

一 ,题目要求

1. 学生学籍信息管理系统设计

[要求]

使用下面的数据设计一个简单的学籍管理系统。 学生基本信息文件(A.TXT) 极其内容: 学号 姓名 性别 宿舍号码 电话号码 01 张成成 男 501 87732111 02 李成华 女 101 87723112 03 王成凤 女 101 87723112 04 张明明 男 502 87734333 05 陈东 男 501 87732111 06 李果 男 502 87734333 07 张园园 女 102 87756112

学生成绩基本信息文件(B.TXT )极其内容:

.....................................................................................................................

学号 课程编号 课程名称 学分平时成绩 实验成绩 卷面成绩 综合成绩 实得学分 01 A01 大学物理 3 66 78 82 02 B03 高等数学 4 78 -1 90 01 B03 高等数学 4 45 -1 88 02 C01 VF 3 65 76 66

................................................................................................................ 功能要求极其说明:

(1)数据录入功能:录入每个学生的学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共7个数据。实得成绩、实得学分根据条件自动运算。 综合成绩的计算:

a. 如果本课程的实验成绩为-1,则表无实验成绩,综合成绩=平时成绩*30%+卷面成绩*70%

b. 如果实验成绩不为-1,表示本课程有实验成绩,综合成绩=平时成绩*15%+实验成绩*15%+卷面成绩*70%

实得学分的计算:采用等级学分制。

综合成绩在90~100之间,应得学分=学分*100% 综合成绩在80~90之间,应得学分=学分*80% 综合成绩在70~80之间,应得学分=学分*75% 综合成绩在60~70之间,应得学分=学分*60% 综合成绩在60分以下,应得学分=学分*0%

(2)查询功能:分为学生基本情况查询和成绩查询两种 学生基本情况查询:

输入一个学号或姓名(可实现选择)查出此学生的基本信息并显示输出。 输入一个宿舍号码,可查出本室所有学生的基本信息并显示输出。 称号查询:

输入一个学号时,查出此学生所有课程情况,格式如下: 学号:XX 课程名称:XXXX 综合成绩:XX 实得学分:XXX

............................................................................... 共修:X 科,实得总分为:XXX

(3) 删除功能:当在A.TXT 中删除一个学生时,自动地在B.TXT 中删除此学生所有信息。

(4)排序功能:能实现选择按综合成绩或实得学分升序或降序排序并显示数据。 [提示]

数据结构采用结构体数组,提供学生基本信息和学生成绩基本信息结构体数组。

二 ,需求分析

根据题目要求,该程序应具备的功能有:

(1)数据录入功能:录入每个学生的学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共7个数据。实得成绩、实得学分根据条件自动运算。 (2)查询功能:分为学生基本情况查询和成绩查询两种

(3)删除功能:当在A.TXT 中删除一个学生时,自动地在B.TXT 中删除此学生所有信息。 (4)排序功能:能实现选择按综合成绩或实得学分升序或降序排序并显示数据。

三, 程序总体设计

四, 程序详细设计

⒈主函数

主函数一般设计得比较简洁,只提供输入,处理和输出部分的函数调用。其中各功能模块用菜单方式选择。 [流程图] [程序]

void main() { while(1) {

printf("\n>>>>>>>>>>>>>>>>\n\n");

printf("*

========================================================= * \n"); printf("* 1>input 2>cha zhao * \n");

printf("* 3>delete 4>paixu xianshi * \n"); printf("* 5>exit * \n"); printf("* * \n");

printf("* --------------------------------------------------------- * \n"); printf(" Please input which you want(1-5):"); ch=getch(); switch(ch) {

case '1':input();break;

case '2':search(); getch();break; case '3':delete();getch(); break; case '4':sort(); getch();break; case '5':exit(0); default: continue; } } }

⒉个功能模块设计

⑴数据录入。 [数据结构]

我们需要录入的信息数据有两类:一类是学生基本信息,包括学号,学号 姓名 性别 宿舍号码 电话号码,存放在文件S_INFO.TXT中。另一类信息是学生成绩基本信息,包括学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共7个数据。实得成绩、

实得学分根据条件自动运算。 这些信息存放在文件S_SCORE.TXT中。 学生基本信息的存放格式为: struct info {

int sMingci; //名次 char xuehao[8]; char name[10]; char sex[2];

char d_num[4]; //宿舍号码 char tel_num[9]; //宿舍电话号码 }data,s_info[100];

成绩基本信息的存放格式为:

struct course {

char xuehao[8];

char course_No[6]; //课程代号 char course_name[10]; //课程名字 float xuefen; //学分 float p_chengji; //平时成绩 float s_chengji; //实验成绩 float j_chengji; //卷面成绩 float z_chengji; //综合成绩 float s_xuefen; //实际学分 }course_data,s_course[100]; [需求分析]

数据录入模块的功能是用户通过输入选项在基本信息和成绩信息的输入之间进行选择。 [程序]

void input() {

while(1) {

printf("\nwhich information do you want to input: b(base) s(socre) e(exit)"); ch=getch();

if(ch=='b'||ch=='B') { if((fp=fopen("s_info.txt","at+"))==NULL) { printf("cannot open this file.\n"); getch();exit(0); }

printf("\nPlease input xuehao:"); gets(sn);

while((fread(&data,sizeof(data),1,fp))==1) { if(strcmp(sn,data.xuehao)==0) { flag=1; } } if(flag==1) { printf("\n the number has exist,press ang key continue:\n"); flag=0; getch(); continue; } else { strcpy(data.xuehao,sn); }

printf("Please input name:"); gets(data.name);

printf("Please input sex:M(male)/F(female):\n"); gets(data.sex);

printf("Please input your dormitory No:"); gets(data.d_num);

printf("Please input telephone Number:"); gets(data.tel_num); fwrite(&data,sizeof(data),1,fp); //写入数据 fclose(fp); } //if

else if(ch=='s'||ch=='S') {

if((fp1=fopen("s_score.txt","at+"))==NULL||(fp=fopen("s_info.txt","rt"))==NULL) { printf("cannot open this file.\n"); getch();exit(0);

} printf("\nPlease input xuehao:"); gets(sn);

while((fread(&data,sizeof(data),1,fp))==1) { if(strcmp(sn,data.xuehao)==0) { flag=1; } } if(!flag)

{ printf("\nthis number is not exist\n"); continue; } else

{ flag=0; strcpy(course_data.xuehao,sn); }

printf("\nPlease input course No:"); gets(course_data.course_No);

printf("\nPlease input course name:"); gets(course_data.course_name);

printf("\nPlease input course xuefeng:"); gets(temp);

course_data.xuefen=atof(temp);

printf("\nPlease input pingshi chengji:"); gets(temp);

course_data.p_chengji=atof(temp);

printf("\nPlease input shiyan chengji:"); gets(temp);

course_data.s_chengji=atof(temp);

printf("\nPlease input juanmian chengji:"); gets(temp);

course_data.j_chengji=atof(temp);

//以下是综合成绩计算

if(course_data.s_chengji==-1) //如果有实验 {

course_data.z_chengji=(course_data.p_chengji)*0.3+(course_data.j_chengji)*0.7;

} else //如果无实验 { course_data.z_chengji=(course_data.p_chengji)*0.15+(course_data.s_chengji)*0.15+(course_data.j_chengji)*0.7; } //以下是实际学分计算 if((course_data.z_chengji)

} //else if else {break; }

printf("another?y/n"); ch=getch(); if(ch=='n'||ch=='N') break; } } //input ⑵查询功能模块。 [需求分析]

该模块的功能分为学生基本情况查询和成绩查询两种。学生基本情况查询是根据输入的学号或姓名查出此学生的基本信息并显示输出;或者根据输入的宿舍号码,查出本室所有学生的基本信息并显示输出。成绩查询的功能是根据输入的学号,查出此学生的所有课程情况。 [流程图]

[程序]

void search() { printf("\n select form: a(student information) b(socre information)"); ch=getch(); if(ch=='a'||ch=='A') { if((fp=fopen("s_info.txt","rt"))==NULL) { printf("\nCannot open this file.\n"); exit(0); } printf("\nselectway: a(student Number) b(student name) c(dormitory NO):\n"); ch1=getch(); //按照学号查找 if(ch1=='a'||ch1=='A') { printf("\nplease input the student number:"); gets(temp_NO); printf(" xuehao name sex sushe hao telephone "); printf("\n------------------------------------------------------------------------------\n");

while((fread(&data,sizeof(data),1,fp))==1) { if(strcmp(temp_NO,data.xuehao)==0) { flag=1; printf("\n%8s%10s%12s%14s%20s\n",data.xuehao,data.name,data.sex,data.d_num,data.tel_num); } } if(!flag) { printf("\nthis number is not exist,press any key to continue\n"); getch(); } else { flag=0; } } //按照名字查找 else if(ch1=='b'||ch1=='B') { printf("\nplease input the name:"); gets(temp_name); printf(" xuehao name sex sushe hao telephone "); printf("\n------------------------------------------------------------------------------\n"); while((fread(&data,sizeof(data),1,fp))==1) { if(strcmp(temp_name,data.name)==0) { flag=1; printf("\n%8s%10s%12s%14s%20s\n",data.xuehao,data.name,data.sex,data.d_num,data.tel_num); } } if(!flag) { printf("\nthis name is not exist,press any key to continue:\n"); getch(); } else

{ flag=0;

}

}

//按照宿舍号码查找

else if(ch1=='c'||ch1=='C')

{

printf("\nplease input the dormitory number:");

gets(temp_dnum);

printf(" xuehao name sex sushe hao telephone ");

printf("\n------------------------------------------------------------------------------\n");

while((fread(&data,sizeof(data),1,fp))==1)

{

if(strcmp(temp_dnum,data.d_num)==0)

{ flag=1;

printf("\n%8s%10s%12s%14s%20s\n",data.xuehao,data.name,data.sex,data.d_num,data.tel_num);

}

if(!flag)

{ printf("this dormitory is not exist,press any key continue:");

getch();

}

else

{

flag=0;

}

}

}

else

{ printf("\nselect error\n");

}

fclose(fp);

} //ch if

//学生成绩查找

else if(ch=='b'||ch=='B')

{

j=0;

z_fen=0;

z_xuefen=0;

if((fp1=fopen("s_score.txt","rt"))==NULL)

{

printf("\nCannot open this file.\n");

exit(0);

}

printf("\nplease input student number:");

gets(temp_NO);

printf(" xuehao course_No course_name xuefen chengji ");

printf("\n------------------------------------------------------------------------------\n");

while((fread(&course_data,sizeof(course_data),1,fp1))==1)

{

if(strcmp(temp_NO,course_data.xuehao)==0)

{ flag=1;

j++;

z_fen=z_fen+course_data.z_chengji;

z_xuefen=z_xuefen+course_data.s_xuefen;

printf("\n%10s%10s%10s%15.1f %18.1f\n",course_data.xuehao,course_data.course_No,course_data.course_name,course_data.s_xuefen,course_data.z_chengji);

}

}

if(!flag)

{ printf(" is not exist");

}

else

{

flag=0;

}

printf("\n------------------------------------------------------------------------------\n"); printf(" z_gong:%3d ke z_xuefen:%3.1f z_cheng ji:%6.1f",j,z_xuefen,z_fen);

}

else

{

printf("error ");

}

fclose(fp1);

}

⑶删除功能模块。

[需求分析]该模块的功能是当在学生基本信息文件中删除一个学生时,自动在成绩信息文件中删除此人的所有信息。

[程序]

void delete()

{

printf("\ninput the number of student you want to delete:");

gets(temp_NO);

if((fp1=fopen("s_score.txt","rt"))==NULL||(fp=fopen("s_info.txt","rt"))==NULL||(fp2=fopen("temp.txt","wt+"))==NULL)

{

printf("cannot open this file.\n");

getch();exit(0);

}

while((fread(&data,sizeof(data),1,fp))==1)

{

if(strcmp(temp_NO,data.xuehao)!=0)

fwrite(&data,sizeof(data),1,fp2);

}

remove("s_info.txt");

rename("temp.txt","s_info.txt");

fclose(fp);

fclose(fp2);

if((fp1=fopen("s_score.txt","rt"))==NULL||(fp2=fopen("temp.txt","wt+"))==NULL) {

printf("cannot open this file.\n");

getch();exit(0);

}

while((fread(&course_data,sizeof(course_data),1,fp1))==1)

{

if(strcmp(temp_NO,course_data.xuehao)!=0)

fwrite(&course_data,sizeof(course_data),1,fp2);

}

remove("s_score.txt");

rename("temp.txt","s_score.txt");

fclose(fp1);

fclose(fp2);

} printf("\n delete successful");

⑷排序功能模块。

[需求分析]

该模块的功能是能实现选择根据综合成绩或实得学分升序或降序排序显示数据。

[流程图]

[程序]

void sort()

{

printf("\nplease input course number:");

gets(tempcn);

if((fp1=fopen("s_score.txt","rt"))==NULL)

{

printf("cannot open this file.\n");

getch();exit(0);

}

i=0;

while((fread(&course_data,sizeof(course_data),1,fp1))==1) {

if(strcmp(tempcn,course_data.course_No)==0) {

s_course[i]=course_data;

i++;

flag=1;

}

}

if(!flag)

{

printf("\nno such course\n");

}

else

{

flag=0;

printf("\nplease select way : a(xuefen) b(zhong he cheng ji)\n");

ch=getch();

printf("\nselect: s(sheng xu) j(jiang xu)"); ch1=getch();

if(ch=='a'||ch=='A') {

//升序排列

if(ch1=='s')

{

for(j=0;j

{

for(k=j;k

{

if(s_course[j].s_xuefen>s_course[k].s_xuefen)

{

temp_course=s_course[j];

s_course[j]=s_course[k];

s_course[k]=temp_course;

}

}

}

printf("\n\nxuehao course_number course_name xuefen chengji\n");

printf("\n----------------------------------------------------------------\n");

for(j=0;j

{

printf("\n%6s%10s%16s%13.1f%13.1f\n",s_course[j].xuehao,s_course[j].course_No,s_course[j].course_name,s_course[j].s_xuefen,s_course[j].z_chengji);

}

}

//降序排列

else

{

for(j=0;j

{

for(k=j;k

{

if(s_course[j].s_xuefen

{

temp_course=s_course[j];

s_course[j]=s_course[k];

s_course[k]=temp_course;

}

}

}

printf("\n\nxuehao course_number course_name xuefen chengji\n");

printf("\n----------------------------------------------------------------\n");

for(j=0;j

{

printf("\n%6s%10s%16s%13.1f%13.1f\n",s_course[j].xuehao,s_course[j].course_No,s_course[j].course_name,s_course[j].s_xuefen,s_course[j].z_chengji);

}

} //ch1

} //ch if

else if(ch=='b'||ch=='B')

{

//升序排列

if(ch1=='s'||ch1=='S')

{

for(j=0;j

{

for(k=j;k

{

if(s_course[j].z_chengji>s_course[k].z_chengji)

{

temp_course=s_course[j];

s_course[j]=s_course[k];

s_course[k]=temp_course;

}

}

}

printf("\n\nxuehao

course_number course_name xuefen chengji\n");

printf("\n----------------------------------------------------------------\n");

for(j=0;j

{

printf("\n%6s%10s%16s%13.1f%13.1f\n",s_course[j].xuehao,s_course[j].course_No,s_course[j].course_name,s_course[j].s_xuefen,s_course[j].z_chengji);

}

}

//降序排列

else

{

for(j=0;j

{

for(k=j;k

{

if(s_course[j].z_chengji

{

temp_course.z_chengji=s_course[j].z_chengji;

s_course[j].z_chengji=s_course[k].z_chengji;

s_course[k].z_chengji=temp_course.z_chengji;

}

}

}

printf("\n\nxuehao course_number course_name xuefen chengji\n");

printf("\n----------------------------------------------------------------\n");

for(j=0;j

{

printf("\n%6s%10s%16s%13.1f%13.1f\n",s_course[j].xuehao,s_course[j].course_No,s_course[j].course_name,s_course[j].s_xuefen,s_course[j].z_chengji);

}

} //ch1

}

else

{

printf("illegal select");

getch();

}

}

五 ,上机操作

编译、连接和运行

下面是运行后各个模块的界面图: 1 主菜单函数

2. 数据录入

3,查询功能

(1)学生基本信息查询

(2)学生成绩查询

4 删除功能

5 排序功能

源程序:

#include "stdio.h" /*I/O函数*/ #include "stdlib.h" /*其它说明*/ #include "string.h" /*字符串函数*/ #include "conio.h" /*屏幕操作函数*/ #include "memory.h" /*内存操作函数*/ #include "ctype.h" /*字符操作函数*/

#include "malloc.h" /*动态地址分配函数*/

struct course

{

char xuehao[8];

char course_No[6]; //课程代号

char course_name[10]; //课程名字

float xuefen; //学分

float p_chengji; //平时成绩

float s_chengji; //实验成绩

float j_chengji; //卷面成绩

float z_chengji; //综合成绩

float s_xuefen; //实际学分

}course_data,s_course[100];

struct info

{

int sMingci; //名次

char xuehao[8];

char name[10];

char sex[2];

char d_num[4]; //宿舍号码

char tel_num[9]; //宿舍电话号码

}data,s_info[100];

int i,j,k=0;

int a,b;

int flag=0;

char temp[20],ch,ch1,ch2;

char temp_NO[8],temp_name[10],temp_dnum[4];

char tempcn[6];

char sn[8]; //临时学号

float z_fen,z_xuefen;

struct course temp_course;

struct info *inf;

FILE *fp,*fp1,*fp2;

void input()

{

while(1)

{

printf("\nwhich information do you want to input: b(base)

ch=getch();

if(ch=='b'||ch=='B')

{

if((fp=fopen("s_info.txt","at+"))==NULL)

{

printf("cannot open this file.\n"); s(socre) e(exit)");

getch();exit(0);

}

printf("\nPlease input xuehao:");

gets(sn);

while((fread(&data,sizeof(data),1,fp))==1)

{

if(strcmp(sn,data.xuehao)==0)

{

flag=1;

}

}

if(flag==1)

{

printf("\n the number has exist,press ang key continue:\n");

flag=0;

getch();

continue;

}

else

{

strcpy(data.xuehao,sn);

}

printf("Please input name:");

gets(data.name);

printf("Please input sex:M(male)/F(female):\n");

gets(data.sex);

printf("Please input your dormitory No:");

gets(data.d_num);

printf("Please input telephone Number:");

gets(data.tel_num);

fwrite(&data,sizeof(data),1,fp); //写入数据

fclose(fp);

} //if

else if(ch=='s'||ch=='S')

{

if((fp1=fopen("s_score.txt","at+"))==NULL||(fp=fopen("s_info.txt","rt"))==NULL)

{

printf("cannot open this file.\n");

getch();exit(0);

}

printf("\nPlease input xuehao:");

gets(sn);

while((fread(&data,sizeof(data),1,fp))==1)

{

if(strcmp(sn,data.xuehao)==0)

{ flag=1;

}

}

if(!flag)

{ printf("\nthis number is not exist\n");

continue;

}

else

{ flag=0;

strcpy(course_data.xuehao,sn);

}

printf("\nPlease input course No:");

gets(course_data.course_No);

printf("\nPlease input course name:");

gets(course_data.course_name);

printf("\nPlease input course xuefeng:");

gets(temp);

course_data.xuefen=atof(temp);

printf("\nPlease input pingshi chengji:");

gets(temp);

course_data.p_chengji=atof(temp);

printf("\nPlease input shiyan chengji:");

gets(temp);

course_data.s_chengji=atof(temp);

printf("\nPlease input juanmian chengji:");

gets(temp);

course_data.j_chengji=atof(temp);

//以下是综合成绩计算

if(course_data.s_chengji==-1) //如果有实验

{

course_data.z_chengji=(course_data.p_chengji)*0.3+(course_data.j_chengji)*0.7;

}

else //如果无实验

{

course_data.z_chengji=(course_data.p_chengji)*0.15+(course_data.s_chengji)*0.15+(course

_data.j_chengji)*0.7;

}

//以下是实际学分计算

if((course_data.z_chengji)

{course_data.s_xuefen=0;}

else if((course_data.z_chengji)

{course_data.s_xuefen=course_data.xuefen*0.6;}

else if((course_data.z_chengji)

{course_data.s_xuefen=course_data.xuefen*0.75;}

else if((course_data.z_chengji)

{course_data.s_xuefen=course_data.xuefen*0.8;}

else

{course_data.s_xuefen=course_data.xuefen;

}

fwrite(&course_data,sizeof(course_data),1,fp1); //写入数据

fclose(fp1);

fclose(fp);

} //else if

else

{break;

}

printf("another?y/n");

ch=getch();

if(ch=='n'||ch=='N')

break;

}

} //input

void search()

{

printf("\n select form: a(student information) b(socre

information)");

ch=getch();

if(ch=='a'||ch=='A')

{

if((fp=fopen("s_info.txt","rt"))==NULL)

{

printf("\nCannot open this file.\n");

exit(0);

}

printf("\nselectway: a(student Number) b(student name) c(dormitory

NO):\n");

ch1=getch();

//按照学号查找

if(ch1=='a'||ch1=='A')

{

printf("\nplease input the student number:");

gets(temp_NO);

printf(" xuehao name sex sushe hao telephone ");

printf("\n------------------------------------------------------------------------------\n");

while((fread(&data,sizeof(data),1,fp))==1)

{

if(strcmp(temp_NO,data.xuehao)==0)

{ flag=1;

printf("\n%8s%10s%12s%14s%20s\n",data.xuehao,data.name,data.sex,data.d_num,data.tel_n

um);

}

}

if(!flag)

{ printf("\nthis number is not exist,press any key to continue\n");

getch();

} } else { } flag=0;

//按照名字查找

else if(ch1=='b'||ch1=='B')

{

printf("\nplease input the name:");

gets(temp_name);

printf(" xuehao name sex sushe hao telephone ");

printf("\n------------------------------------------------------------------------------\n");

while((fread(&data,sizeof(data),1,fp))==1)

{

if(strcmp(temp_name,data.name)==0)

{ flag=1;

printf("\n%8s%10s%12s%14s%20s\n",data.xuehao,data.name,data.sex,data.d_num,data.tel_num);

}

}

if(!flag)

{ printf("\nthis name is not exist,press any key to continue:\n");

getch();

}

else

{ flag=0;

}

}

//按照宿舍号码查找

else if(ch1=='c'||ch1=='C')

{

printf("\nplease input the dormitory number:");

gets(temp_dnum);

printf(" xuehao name sex sushe hao telephone ");

printf("\n------------------------------------------------------------------------------\n");

while((fread(&data,sizeof(data),1,fp))==1)

{

if(strcmp(temp_dnum,data.d_num)==0)

{ flag=1;

printf("\n%8s%10s%12s%14s%20s\n",data.xuehao,data.name,data.sex,data.d_num,data.tel_num);

}

if(!flag)

{ printf("this dormitory is not exist,press any key continue:");

getch();

}

else

{

flag=0;

}

}

}

else

{ printf("\nselect error\n");

}

fclose(fp);

} //ch if

//学生成绩查找

else if(ch=='b'||ch=='B')

{

j=0;

z_fen=0;

z_xuefen=0;

if((fp1=fopen("s_score.txt","rt"))==NULL)

{

printf("\nCannot open this file.\n");

exit(0);

}

printf("\nplease input student number:");

gets(temp_NO);

printf(" xuehao course_No course_name xuefen chengji ");

printf("\n------------------------------------------------------------------------------\n");

while((fread(&course_data,sizeof(course_data),1,fp1))==1)

{

if(strcmp(temp_NO,course_data.xuehao)==0)

{ flag=1;

j++;

z_fen=z_fen+course_data.z_chengji;

z_xuefen=z_xuefen+course_data.s_xuefen;

printf("\n%10s%10s%10s%15.1f %18.1f\n",course_data.xuehao,course_data.course_No,course_data.course_name,course_data.s_xuefen,course_data.z_chengji);

}

}

if(!flag)

{ printf(" is not exist");

}

else

{

flag=0;

}

printf("\n------------------------------------------------------------------------------\n"); printf(" z_gong:%3d ke z_xuefen:%3.1f z_cheng ji:%6.1f",j,z_xuefen,z_fen);

}

else

{

printf("error ");

}

fclose(fp1);

} //search

void delete()

{

printf("\ninput the number of student you want to delete:");

gets(temp_NO);

if((fp1=fopen("s_score.txt","rt"))==NULL||(fp=fopen("s_info.txt","rt"))==NULL||(fp2=fopen("temp.txt","wt+"))==NULL)

{

printf("cannot open this file.\n");

getch();exit(0);

}

while((fread(&data,sizeof(data),1,fp))==1)

{

if(strcmp(temp_NO,data.xuehao)!=0)

fwrite(&data,sizeof(data),1,fp2);

}

remove("s_info.txt");

rename("temp.txt","s_info.txt");

fclose(fp);

fclose(fp2);

if((fp1=fopen("s_score.txt","rt"))==NULL||(fp2=fopen("temp.txt","wt+"))==NULL) {

printf("cannot open this file.\n");

getch();exit(0);

}

while((fread(&course_data,sizeof(course_data),1,fp1))==1)

{

if(strcmp(temp_NO,course_data.xuehao)!=0)

fwrite(&course_data,sizeof(course_data),1,fp2);

}

remove("s_score.txt");

rename("temp.txt","s_score.txt");

fclose(fp1);

fclose(fp2);

printf("\n delete successful");

}

void sort()

{

printf("\nplease input course number:");

gets(tempcn);

if((fp1=fopen("s_score.txt","rt"))==NULL)

he cheng ji)\n");

{ printf("cannot open this file.\n"); getch();exit(0); } i=0; while((fread(&course_data,sizeof(course_data),1,fp1))==1) { if(strcmp(tempcn,course_data.course_No)==0) { s_course[i]=course_data; i++; flag=1; } } if(!flag) { printf("\nno such course\n"); } else { flag=0; printf("\nplease select way : a(xuefen) b(zhong ch=getch(); printf("\nselect: s(sheng xu) j(jiang xu)"); ch1=getch(); if(ch=='a'||ch=='A') { //升序排列 if(ch1=='s') { for(j=0;j

for(k=j;k

{

if(s_course[j].s_xuefen>s_course[k].s_xuefen)

{

temp_course=s_course[j];

s_course[j]=s_course[k];

s_course[k]=temp_course;

}

}

}

printf("\n\nxuehao course_number course_name xuefen chengji\n");

printf("\n----------------------------------------------------------------\n");

for(j=0;j

{

printf("\n%6s%10s%16s%13.1f%13.1f\n",s_course[j].xuehao,s_course[j].course_No,s_course[j].course_name,s_course[j].s_xuefen,s_course[j].z_chengji);

}

}

//降序排列

else

{

for(j=0;j

{

for(k=j;k

{

if(s_course[j].s_xuefen

{

temp_course=s_course[j];

s_course[j]=s_course[k];

s_course[k]=temp_course;

}

}

}

printf("\n\nxuehao course_number course_name xuefen chengji\n");

printf("\n----------------------------------------------------------------\n");

for(j=0;j

{

printf("\n%6s%10s%16s%13.1f%13.1f\n",s_course[j].xuehao,s_course[j].course_No,s_course[j].course_name,s_course[j].s_xuefen,s_course[j].z_chengji);

}

} //ch1

} //ch if

else if(ch=='b'||ch=='B')

{

//升序排列

if(ch1=='s'||ch1=='S')

{

for(j=0;j

{

for(k=j;k

{

if(s_course[j].z_chengji>s_course[k].z_chengji)

{

temp_course=s_course[j];

s_course[j]=s_course[k];

s_course[k]=temp_course;

}

}

}

printf("\n\nxuehao

course_number course_name xuefen chengji\n");

printf("\n----------------------------------------------------------------\n");

for(j=0;j

{

printf("\n%6s%10s%16s%13.1f%13.1f\n",s_course[j].xuehao,s_course[j].course_No,s_course[j].course_name,s_course[j].s_xuefen,s_course[j].z_chengji);

}

}

//降序排列

else

{

for(j=0;j

{

for(k=j;k

{

if(s_course[j].z_chengji

{

temp_course.z_chengji=s_course[j].z_chengji;

s_course[j].z_chengji=s_course[k].z_chengji;

s_course[k].z_chengji=temp_course.z_chengji;

}

}

}

printf("\n\nxuehao course_number course_name xuefen chengji\n");

printf("\n----------------------------------------------------------------\n");

for(j=0;j

{

printf("\n%6s%10s%16s%13.1f%13.1f\n",s_course[j].xuehao,s_course[j].course_No,s_course[j].course_name,s_course[j].s_xuefen,s_course[j].z_chengji);

}

} //ch1

}

else

{

printf("illegal select");

getch();

}

}

}

void main()

{

while(1)

{

printf("\n>>>>>>>>>>>>>>>>\n\n");

printf("*

========================================================= * \n"); printf("* 1>input 2>cha zhao * \n");

printf("* 3>delete 4>paixu xianshi * \n");

printf("* 5>exit * \n");

printf("* * \n");

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

printf(" Please input which you want(1-5):");

ch=getch();

switch(ch)

{

case '1':input();break;

case '2':search(); getch();break;

case '3':delete();getch(); break;

case '4':sort(); getch();break;

case '5':exit(0);

default: continue;

}

}

}

六,总结

通过本次的实习,使我掌握了模块化设计方法,理解和运用结构化程序设计的思想和方法。学会了利用 流程图表示算法,提高了利用C 语言进行程序设计能力。

程序设计的过程,实际上是确定解决问题的详细步骤,而这个步骤通常称为流程,然后采用逐步细化的方法实现整个程序。

第一次设计程序,感觉压力很大,很难完成。但通过同学和老师的帮助最终还是完成了自己的程序设计,虽然程序还不是很完美,但能满足题目的各项要求,相信以后再次进行程序设计的时候会得心应手。最后感谢老师这么多天的教诲。谢谢!

C 语言课程设计 综合实习报告

题目:学籍信息管理系统 姓名: 黄凯 学号:[1**********] 班级号: 052081 院(系):工程学院 专业: 土木工程 指导教师: 曹弘

一 ,题目要求

1. 学生学籍信息管理系统设计

[要求]

使用下面的数据设计一个简单的学籍管理系统。 学生基本信息文件(A.TXT) 极其内容: 学号 姓名 性别 宿舍号码 电话号码 01 张成成 男 501 87732111 02 李成华 女 101 87723112 03 王成凤 女 101 87723112 04 张明明 男 502 87734333 05 陈东 男 501 87732111 06 李果 男 502 87734333 07 张园园 女 102 87756112

学生成绩基本信息文件(B.TXT )极其内容:

.....................................................................................................................

学号 课程编号 课程名称 学分平时成绩 实验成绩 卷面成绩 综合成绩 实得学分 01 A01 大学物理 3 66 78 82 02 B03 高等数学 4 78 -1 90 01 B03 高等数学 4 45 -1 88 02 C01 VF 3 65 76 66

................................................................................................................ 功能要求极其说明:

(1)数据录入功能:录入每个学生的学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共7个数据。实得成绩、实得学分根据条件自动运算。 综合成绩的计算:

a. 如果本课程的实验成绩为-1,则表无实验成绩,综合成绩=平时成绩*30%+卷面成绩*70%

b. 如果实验成绩不为-1,表示本课程有实验成绩,综合成绩=平时成绩*15%+实验成绩*15%+卷面成绩*70%

实得学分的计算:采用等级学分制。

综合成绩在90~100之间,应得学分=学分*100% 综合成绩在80~90之间,应得学分=学分*80% 综合成绩在70~80之间,应得学分=学分*75% 综合成绩在60~70之间,应得学分=学分*60% 综合成绩在60分以下,应得学分=学分*0%

(2)查询功能:分为学生基本情况查询和成绩查询两种 学生基本情况查询:

输入一个学号或姓名(可实现选择)查出此学生的基本信息并显示输出。 输入一个宿舍号码,可查出本室所有学生的基本信息并显示输出。 称号查询:

输入一个学号时,查出此学生所有课程情况,格式如下: 学号:XX 课程名称:XXXX 综合成绩:XX 实得学分:XXX

............................................................................... 共修:X 科,实得总分为:XXX

(3) 删除功能:当在A.TXT 中删除一个学生时,自动地在B.TXT 中删除此学生所有信息。

(4)排序功能:能实现选择按综合成绩或实得学分升序或降序排序并显示数据。 [提示]

数据结构采用结构体数组,提供学生基本信息和学生成绩基本信息结构体数组。

二 ,需求分析

根据题目要求,该程序应具备的功能有:

(1)数据录入功能:录入每个学生的学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共7个数据。实得成绩、实得学分根据条件自动运算。 (2)查询功能:分为学生基本情况查询和成绩查询两种

(3)删除功能:当在A.TXT 中删除一个学生时,自动地在B.TXT 中删除此学生所有信息。 (4)排序功能:能实现选择按综合成绩或实得学分升序或降序排序并显示数据。

三, 程序总体设计

四, 程序详细设计

⒈主函数

主函数一般设计得比较简洁,只提供输入,处理和输出部分的函数调用。其中各功能模块用菜单方式选择。 [流程图] [程序]

void main() { while(1) {

printf("\n>>>>>>>>>>>>>>>>\n\n");

printf("*

========================================================= * \n"); printf("* 1>input 2>cha zhao * \n");

printf("* 3>delete 4>paixu xianshi * \n"); printf("* 5>exit * \n"); printf("* * \n");

printf("* --------------------------------------------------------- * \n"); printf(" Please input which you want(1-5):"); ch=getch(); switch(ch) {

case '1':input();break;

case '2':search(); getch();break; case '3':delete();getch(); break; case '4':sort(); getch();break; case '5':exit(0); default: continue; } } }

⒉个功能模块设计

⑴数据录入。 [数据结构]

我们需要录入的信息数据有两类:一类是学生基本信息,包括学号,学号 姓名 性别 宿舍号码 电话号码,存放在文件S_INFO.TXT中。另一类信息是学生成绩基本信息,包括学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共7个数据。实得成绩、

实得学分根据条件自动运算。 这些信息存放在文件S_SCORE.TXT中。 学生基本信息的存放格式为: struct info {

int sMingci; //名次 char xuehao[8]; char name[10]; char sex[2];

char d_num[4]; //宿舍号码 char tel_num[9]; //宿舍电话号码 }data,s_info[100];

成绩基本信息的存放格式为:

struct course {

char xuehao[8];

char course_No[6]; //课程代号 char course_name[10]; //课程名字 float xuefen; //学分 float p_chengji; //平时成绩 float s_chengji; //实验成绩 float j_chengji; //卷面成绩 float z_chengji; //综合成绩 float s_xuefen; //实际学分 }course_data,s_course[100]; [需求分析]

数据录入模块的功能是用户通过输入选项在基本信息和成绩信息的输入之间进行选择。 [程序]

void input() {

while(1) {

printf("\nwhich information do you want to input: b(base) s(socre) e(exit)"); ch=getch();

if(ch=='b'||ch=='B') { if((fp=fopen("s_info.txt","at+"))==NULL) { printf("cannot open this file.\n"); getch();exit(0); }

printf("\nPlease input xuehao:"); gets(sn);

while((fread(&data,sizeof(data),1,fp))==1) { if(strcmp(sn,data.xuehao)==0) { flag=1; } } if(flag==1) { printf("\n the number has exist,press ang key continue:\n"); flag=0; getch(); continue; } else { strcpy(data.xuehao,sn); }

printf("Please input name:"); gets(data.name);

printf("Please input sex:M(male)/F(female):\n"); gets(data.sex);

printf("Please input your dormitory No:"); gets(data.d_num);

printf("Please input telephone Number:"); gets(data.tel_num); fwrite(&data,sizeof(data),1,fp); //写入数据 fclose(fp); } //if

else if(ch=='s'||ch=='S') {

if((fp1=fopen("s_score.txt","at+"))==NULL||(fp=fopen("s_info.txt","rt"))==NULL) { printf("cannot open this file.\n"); getch();exit(0);

} printf("\nPlease input xuehao:"); gets(sn);

while((fread(&data,sizeof(data),1,fp))==1) { if(strcmp(sn,data.xuehao)==0) { flag=1; } } if(!flag)

{ printf("\nthis number is not exist\n"); continue; } else

{ flag=0; strcpy(course_data.xuehao,sn); }

printf("\nPlease input course No:"); gets(course_data.course_No);

printf("\nPlease input course name:"); gets(course_data.course_name);

printf("\nPlease input course xuefeng:"); gets(temp);

course_data.xuefen=atof(temp);

printf("\nPlease input pingshi chengji:"); gets(temp);

course_data.p_chengji=atof(temp);

printf("\nPlease input shiyan chengji:"); gets(temp);

course_data.s_chengji=atof(temp);

printf("\nPlease input juanmian chengji:"); gets(temp);

course_data.j_chengji=atof(temp);

//以下是综合成绩计算

if(course_data.s_chengji==-1) //如果有实验 {

course_data.z_chengji=(course_data.p_chengji)*0.3+(course_data.j_chengji)*0.7;

} else //如果无实验 { course_data.z_chengji=(course_data.p_chengji)*0.15+(course_data.s_chengji)*0.15+(course_data.j_chengji)*0.7; } //以下是实际学分计算 if((course_data.z_chengji)

} //else if else {break; }

printf("another?y/n"); ch=getch(); if(ch=='n'||ch=='N') break; } } //input ⑵查询功能模块。 [需求分析]

该模块的功能分为学生基本情况查询和成绩查询两种。学生基本情况查询是根据输入的学号或姓名查出此学生的基本信息并显示输出;或者根据输入的宿舍号码,查出本室所有学生的基本信息并显示输出。成绩查询的功能是根据输入的学号,查出此学生的所有课程情况。 [流程图]

[程序]

void search() { printf("\n select form: a(student information) b(socre information)"); ch=getch(); if(ch=='a'||ch=='A') { if((fp=fopen("s_info.txt","rt"))==NULL) { printf("\nCannot open this file.\n"); exit(0); } printf("\nselectway: a(student Number) b(student name) c(dormitory NO):\n"); ch1=getch(); //按照学号查找 if(ch1=='a'||ch1=='A') { printf("\nplease input the student number:"); gets(temp_NO); printf(" xuehao name sex sushe hao telephone "); printf("\n------------------------------------------------------------------------------\n");

while((fread(&data,sizeof(data),1,fp))==1) { if(strcmp(temp_NO,data.xuehao)==0) { flag=1; printf("\n%8s%10s%12s%14s%20s\n",data.xuehao,data.name,data.sex,data.d_num,data.tel_num); } } if(!flag) { printf("\nthis number is not exist,press any key to continue\n"); getch(); } else { flag=0; } } //按照名字查找 else if(ch1=='b'||ch1=='B') { printf("\nplease input the name:"); gets(temp_name); printf(" xuehao name sex sushe hao telephone "); printf("\n------------------------------------------------------------------------------\n"); while((fread(&data,sizeof(data),1,fp))==1) { if(strcmp(temp_name,data.name)==0) { flag=1; printf("\n%8s%10s%12s%14s%20s\n",data.xuehao,data.name,data.sex,data.d_num,data.tel_num); } } if(!flag) { printf("\nthis name is not exist,press any key to continue:\n"); getch(); } else

{ flag=0;

}

}

//按照宿舍号码查找

else if(ch1=='c'||ch1=='C')

{

printf("\nplease input the dormitory number:");

gets(temp_dnum);

printf(" xuehao name sex sushe hao telephone ");

printf("\n------------------------------------------------------------------------------\n");

while((fread(&data,sizeof(data),1,fp))==1)

{

if(strcmp(temp_dnum,data.d_num)==0)

{ flag=1;

printf("\n%8s%10s%12s%14s%20s\n",data.xuehao,data.name,data.sex,data.d_num,data.tel_num);

}

if(!flag)

{ printf("this dormitory is not exist,press any key continue:");

getch();

}

else

{

flag=0;

}

}

}

else

{ printf("\nselect error\n");

}

fclose(fp);

} //ch if

//学生成绩查找

else if(ch=='b'||ch=='B')

{

j=0;

z_fen=0;

z_xuefen=0;

if((fp1=fopen("s_score.txt","rt"))==NULL)

{

printf("\nCannot open this file.\n");

exit(0);

}

printf("\nplease input student number:");

gets(temp_NO);

printf(" xuehao course_No course_name xuefen chengji ");

printf("\n------------------------------------------------------------------------------\n");

while((fread(&course_data,sizeof(course_data),1,fp1))==1)

{

if(strcmp(temp_NO,course_data.xuehao)==0)

{ flag=1;

j++;

z_fen=z_fen+course_data.z_chengji;

z_xuefen=z_xuefen+course_data.s_xuefen;

printf("\n%10s%10s%10s%15.1f %18.1f\n",course_data.xuehao,course_data.course_No,course_data.course_name,course_data.s_xuefen,course_data.z_chengji);

}

}

if(!flag)

{ printf(" is not exist");

}

else

{

flag=0;

}

printf("\n------------------------------------------------------------------------------\n"); printf(" z_gong:%3d ke z_xuefen:%3.1f z_cheng ji:%6.1f",j,z_xuefen,z_fen);

}

else

{

printf("error ");

}

fclose(fp1);

}

⑶删除功能模块。

[需求分析]该模块的功能是当在学生基本信息文件中删除一个学生时,自动在成绩信息文件中删除此人的所有信息。

[程序]

void delete()

{

printf("\ninput the number of student you want to delete:");

gets(temp_NO);

if((fp1=fopen("s_score.txt","rt"))==NULL||(fp=fopen("s_info.txt","rt"))==NULL||(fp2=fopen("temp.txt","wt+"))==NULL)

{

printf("cannot open this file.\n");

getch();exit(0);

}

while((fread(&data,sizeof(data),1,fp))==1)

{

if(strcmp(temp_NO,data.xuehao)!=0)

fwrite(&data,sizeof(data),1,fp2);

}

remove("s_info.txt");

rename("temp.txt","s_info.txt");

fclose(fp);

fclose(fp2);

if((fp1=fopen("s_score.txt","rt"))==NULL||(fp2=fopen("temp.txt","wt+"))==NULL) {

printf("cannot open this file.\n");

getch();exit(0);

}

while((fread(&course_data,sizeof(course_data),1,fp1))==1)

{

if(strcmp(temp_NO,course_data.xuehao)!=0)

fwrite(&course_data,sizeof(course_data),1,fp2);

}

remove("s_score.txt");

rename("temp.txt","s_score.txt");

fclose(fp1);

fclose(fp2);

} printf("\n delete successful");

⑷排序功能模块。

[需求分析]

该模块的功能是能实现选择根据综合成绩或实得学分升序或降序排序显示数据。

[流程图]

[程序]

void sort()

{

printf("\nplease input course number:");

gets(tempcn);

if((fp1=fopen("s_score.txt","rt"))==NULL)

{

printf("cannot open this file.\n");

getch();exit(0);

}

i=0;

while((fread(&course_data,sizeof(course_data),1,fp1))==1) {

if(strcmp(tempcn,course_data.course_No)==0) {

s_course[i]=course_data;

i++;

flag=1;

}

}

if(!flag)

{

printf("\nno such course\n");

}

else

{

flag=0;

printf("\nplease select way : a(xuefen) b(zhong he cheng ji)\n");

ch=getch();

printf("\nselect: s(sheng xu) j(jiang xu)"); ch1=getch();

if(ch=='a'||ch=='A') {

//升序排列

if(ch1=='s')

{

for(j=0;j

{

for(k=j;k

{

if(s_course[j].s_xuefen>s_course[k].s_xuefen)

{

temp_course=s_course[j];

s_course[j]=s_course[k];

s_course[k]=temp_course;

}

}

}

printf("\n\nxuehao course_number course_name xuefen chengji\n");

printf("\n----------------------------------------------------------------\n");

for(j=0;j

{

printf("\n%6s%10s%16s%13.1f%13.1f\n",s_course[j].xuehao,s_course[j].course_No,s_course[j].course_name,s_course[j].s_xuefen,s_course[j].z_chengji);

}

}

//降序排列

else

{

for(j=0;j

{

for(k=j;k

{

if(s_course[j].s_xuefen

{

temp_course=s_course[j];

s_course[j]=s_course[k];

s_course[k]=temp_course;

}

}

}

printf("\n\nxuehao course_number course_name xuefen chengji\n");

printf("\n----------------------------------------------------------------\n");

for(j=0;j

{

printf("\n%6s%10s%16s%13.1f%13.1f\n",s_course[j].xuehao,s_course[j].course_No,s_course[j].course_name,s_course[j].s_xuefen,s_course[j].z_chengji);

}

} //ch1

} //ch if

else if(ch=='b'||ch=='B')

{

//升序排列

if(ch1=='s'||ch1=='S')

{

for(j=0;j

{

for(k=j;k

{

if(s_course[j].z_chengji>s_course[k].z_chengji)

{

temp_course=s_course[j];

s_course[j]=s_course[k];

s_course[k]=temp_course;

}

}

}

printf("\n\nxuehao

course_number course_name xuefen chengji\n");

printf("\n----------------------------------------------------------------\n");

for(j=0;j

{

printf("\n%6s%10s%16s%13.1f%13.1f\n",s_course[j].xuehao,s_course[j].course_No,s_course[j].course_name,s_course[j].s_xuefen,s_course[j].z_chengji);

}

}

//降序排列

else

{

for(j=0;j

{

for(k=j;k

{

if(s_course[j].z_chengji

{

temp_course.z_chengji=s_course[j].z_chengji;

s_course[j].z_chengji=s_course[k].z_chengji;

s_course[k].z_chengji=temp_course.z_chengji;

}

}

}

printf("\n\nxuehao course_number course_name xuefen chengji\n");

printf("\n----------------------------------------------------------------\n");

for(j=0;j

{

printf("\n%6s%10s%16s%13.1f%13.1f\n",s_course[j].xuehao,s_course[j].course_No,s_course[j].course_name,s_course[j].s_xuefen,s_course[j].z_chengji);

}

} //ch1

}

else

{

printf("illegal select");

getch();

}

}

五 ,上机操作

编译、连接和运行

下面是运行后各个模块的界面图: 1 主菜单函数

2. 数据录入

3,查询功能

(1)学生基本信息查询

(2)学生成绩查询

4 删除功能

5 排序功能

源程序:

#include "stdio.h" /*I/O函数*/ #include "stdlib.h" /*其它说明*/ #include "string.h" /*字符串函数*/ #include "conio.h" /*屏幕操作函数*/ #include "memory.h" /*内存操作函数*/ #include "ctype.h" /*字符操作函数*/

#include "malloc.h" /*动态地址分配函数*/

struct course

{

char xuehao[8];

char course_No[6]; //课程代号

char course_name[10]; //课程名字

float xuefen; //学分

float p_chengji; //平时成绩

float s_chengji; //实验成绩

float j_chengji; //卷面成绩

float z_chengji; //综合成绩

float s_xuefen; //实际学分

}course_data,s_course[100];

struct info

{

int sMingci; //名次

char xuehao[8];

char name[10];

char sex[2];

char d_num[4]; //宿舍号码

char tel_num[9]; //宿舍电话号码

}data,s_info[100];

int i,j,k=0;

int a,b;

int flag=0;

char temp[20],ch,ch1,ch2;

char temp_NO[8],temp_name[10],temp_dnum[4];

char tempcn[6];

char sn[8]; //临时学号

float z_fen,z_xuefen;

struct course temp_course;

struct info *inf;

FILE *fp,*fp1,*fp2;

void input()

{

while(1)

{

printf("\nwhich information do you want to input: b(base)

ch=getch();

if(ch=='b'||ch=='B')

{

if((fp=fopen("s_info.txt","at+"))==NULL)

{

printf("cannot open this file.\n"); s(socre) e(exit)");

getch();exit(0);

}

printf("\nPlease input xuehao:");

gets(sn);

while((fread(&data,sizeof(data),1,fp))==1)

{

if(strcmp(sn,data.xuehao)==0)

{

flag=1;

}

}

if(flag==1)

{

printf("\n the number has exist,press ang key continue:\n");

flag=0;

getch();

continue;

}

else

{

strcpy(data.xuehao,sn);

}

printf("Please input name:");

gets(data.name);

printf("Please input sex:M(male)/F(female):\n");

gets(data.sex);

printf("Please input your dormitory No:");

gets(data.d_num);

printf("Please input telephone Number:");

gets(data.tel_num);

fwrite(&data,sizeof(data),1,fp); //写入数据

fclose(fp);

} //if

else if(ch=='s'||ch=='S')

{

if((fp1=fopen("s_score.txt","at+"))==NULL||(fp=fopen("s_info.txt","rt"))==NULL)

{

printf("cannot open this file.\n");

getch();exit(0);

}

printf("\nPlease input xuehao:");

gets(sn);

while((fread(&data,sizeof(data),1,fp))==1)

{

if(strcmp(sn,data.xuehao)==0)

{ flag=1;

}

}

if(!flag)

{ printf("\nthis number is not exist\n");

continue;

}

else

{ flag=0;

strcpy(course_data.xuehao,sn);

}

printf("\nPlease input course No:");

gets(course_data.course_No);

printf("\nPlease input course name:");

gets(course_data.course_name);

printf("\nPlease input course xuefeng:");

gets(temp);

course_data.xuefen=atof(temp);

printf("\nPlease input pingshi chengji:");

gets(temp);

course_data.p_chengji=atof(temp);

printf("\nPlease input shiyan chengji:");

gets(temp);

course_data.s_chengji=atof(temp);

printf("\nPlease input juanmian chengji:");

gets(temp);

course_data.j_chengji=atof(temp);

//以下是综合成绩计算

if(course_data.s_chengji==-1) //如果有实验

{

course_data.z_chengji=(course_data.p_chengji)*0.3+(course_data.j_chengji)*0.7;

}

else //如果无实验

{

course_data.z_chengji=(course_data.p_chengji)*0.15+(course_data.s_chengji)*0.15+(course

_data.j_chengji)*0.7;

}

//以下是实际学分计算

if((course_data.z_chengji)

{course_data.s_xuefen=0;}

else if((course_data.z_chengji)

{course_data.s_xuefen=course_data.xuefen*0.6;}

else if((course_data.z_chengji)

{course_data.s_xuefen=course_data.xuefen*0.75;}

else if((course_data.z_chengji)

{course_data.s_xuefen=course_data.xuefen*0.8;}

else

{course_data.s_xuefen=course_data.xuefen;

}

fwrite(&course_data,sizeof(course_data),1,fp1); //写入数据

fclose(fp1);

fclose(fp);

} //else if

else

{break;

}

printf("another?y/n");

ch=getch();

if(ch=='n'||ch=='N')

break;

}

} //input

void search()

{

printf("\n select form: a(student information) b(socre

information)");

ch=getch();

if(ch=='a'||ch=='A')

{

if((fp=fopen("s_info.txt","rt"))==NULL)

{

printf("\nCannot open this file.\n");

exit(0);

}

printf("\nselectway: a(student Number) b(student name) c(dormitory

NO):\n");

ch1=getch();

//按照学号查找

if(ch1=='a'||ch1=='A')

{

printf("\nplease input the student number:");

gets(temp_NO);

printf(" xuehao name sex sushe hao telephone ");

printf("\n------------------------------------------------------------------------------\n");

while((fread(&data,sizeof(data),1,fp))==1)

{

if(strcmp(temp_NO,data.xuehao)==0)

{ flag=1;

printf("\n%8s%10s%12s%14s%20s\n",data.xuehao,data.name,data.sex,data.d_num,data.tel_n

um);

}

}

if(!flag)

{ printf("\nthis number is not exist,press any key to continue\n");

getch();

} } else { } flag=0;

//按照名字查找

else if(ch1=='b'||ch1=='B')

{

printf("\nplease input the name:");

gets(temp_name);

printf(" xuehao name sex sushe hao telephone ");

printf("\n------------------------------------------------------------------------------\n");

while((fread(&data,sizeof(data),1,fp))==1)

{

if(strcmp(temp_name,data.name)==0)

{ flag=1;

printf("\n%8s%10s%12s%14s%20s\n",data.xuehao,data.name,data.sex,data.d_num,data.tel_num);

}

}

if(!flag)

{ printf("\nthis name is not exist,press any key to continue:\n");

getch();

}

else

{ flag=0;

}

}

//按照宿舍号码查找

else if(ch1=='c'||ch1=='C')

{

printf("\nplease input the dormitory number:");

gets(temp_dnum);

printf(" xuehao name sex sushe hao telephone ");

printf("\n------------------------------------------------------------------------------\n");

while((fread(&data,sizeof(data),1,fp))==1)

{

if(strcmp(temp_dnum,data.d_num)==0)

{ flag=1;

printf("\n%8s%10s%12s%14s%20s\n",data.xuehao,data.name,data.sex,data.d_num,data.tel_num);

}

if(!flag)

{ printf("this dormitory is not exist,press any key continue:");

getch();

}

else

{

flag=0;

}

}

}

else

{ printf("\nselect error\n");

}

fclose(fp);

} //ch if

//学生成绩查找

else if(ch=='b'||ch=='B')

{

j=0;

z_fen=0;

z_xuefen=0;

if((fp1=fopen("s_score.txt","rt"))==NULL)

{

printf("\nCannot open this file.\n");

exit(0);

}

printf("\nplease input student number:");

gets(temp_NO);

printf(" xuehao course_No course_name xuefen chengji ");

printf("\n------------------------------------------------------------------------------\n");

while((fread(&course_data,sizeof(course_data),1,fp1))==1)

{

if(strcmp(temp_NO,course_data.xuehao)==0)

{ flag=1;

j++;

z_fen=z_fen+course_data.z_chengji;

z_xuefen=z_xuefen+course_data.s_xuefen;

printf("\n%10s%10s%10s%15.1f %18.1f\n",course_data.xuehao,course_data.course_No,course_data.course_name,course_data.s_xuefen,course_data.z_chengji);

}

}

if(!flag)

{ printf(" is not exist");

}

else

{

flag=0;

}

printf("\n------------------------------------------------------------------------------\n"); printf(" z_gong:%3d ke z_xuefen:%3.1f z_cheng ji:%6.1f",j,z_xuefen,z_fen);

}

else

{

printf("error ");

}

fclose(fp1);

} //search

void delete()

{

printf("\ninput the number of student you want to delete:");

gets(temp_NO);

if((fp1=fopen("s_score.txt","rt"))==NULL||(fp=fopen("s_info.txt","rt"))==NULL||(fp2=fopen("temp.txt","wt+"))==NULL)

{

printf("cannot open this file.\n");

getch();exit(0);

}

while((fread(&data,sizeof(data),1,fp))==1)

{

if(strcmp(temp_NO,data.xuehao)!=0)

fwrite(&data,sizeof(data),1,fp2);

}

remove("s_info.txt");

rename("temp.txt","s_info.txt");

fclose(fp);

fclose(fp2);

if((fp1=fopen("s_score.txt","rt"))==NULL||(fp2=fopen("temp.txt","wt+"))==NULL) {

printf("cannot open this file.\n");

getch();exit(0);

}

while((fread(&course_data,sizeof(course_data),1,fp1))==1)

{

if(strcmp(temp_NO,course_data.xuehao)!=0)

fwrite(&course_data,sizeof(course_data),1,fp2);

}

remove("s_score.txt");

rename("temp.txt","s_score.txt");

fclose(fp1);

fclose(fp2);

printf("\n delete successful");

}

void sort()

{

printf("\nplease input course number:");

gets(tempcn);

if((fp1=fopen("s_score.txt","rt"))==NULL)

he cheng ji)\n");

{ printf("cannot open this file.\n"); getch();exit(0); } i=0; while((fread(&course_data,sizeof(course_data),1,fp1))==1) { if(strcmp(tempcn,course_data.course_No)==0) { s_course[i]=course_data; i++; flag=1; } } if(!flag) { printf("\nno such course\n"); } else { flag=0; printf("\nplease select way : a(xuefen) b(zhong ch=getch(); printf("\nselect: s(sheng xu) j(jiang xu)"); ch1=getch(); if(ch=='a'||ch=='A') { //升序排列 if(ch1=='s') { for(j=0;j

for(k=j;k

{

if(s_course[j].s_xuefen>s_course[k].s_xuefen)

{

temp_course=s_course[j];

s_course[j]=s_course[k];

s_course[k]=temp_course;

}

}

}

printf("\n\nxuehao course_number course_name xuefen chengji\n");

printf("\n----------------------------------------------------------------\n");

for(j=0;j

{

printf("\n%6s%10s%16s%13.1f%13.1f\n",s_course[j].xuehao,s_course[j].course_No,s_course[j].course_name,s_course[j].s_xuefen,s_course[j].z_chengji);

}

}

//降序排列

else

{

for(j=0;j

{

for(k=j;k

{

if(s_course[j].s_xuefen

{

temp_course=s_course[j];

s_course[j]=s_course[k];

s_course[k]=temp_course;

}

}

}

printf("\n\nxuehao course_number course_name xuefen chengji\n");

printf("\n----------------------------------------------------------------\n");

for(j=0;j

{

printf("\n%6s%10s%16s%13.1f%13.1f\n",s_course[j].xuehao,s_course[j].course_No,s_course[j].course_name,s_course[j].s_xuefen,s_course[j].z_chengji);

}

} //ch1

} //ch if

else if(ch=='b'||ch=='B')

{

//升序排列

if(ch1=='s'||ch1=='S')

{

for(j=0;j

{

for(k=j;k

{

if(s_course[j].z_chengji>s_course[k].z_chengji)

{

temp_course=s_course[j];

s_course[j]=s_course[k];

s_course[k]=temp_course;

}

}

}

printf("\n\nxuehao

course_number course_name xuefen chengji\n");

printf("\n----------------------------------------------------------------\n");

for(j=0;j

{

printf("\n%6s%10s%16s%13.1f%13.1f\n",s_course[j].xuehao,s_course[j].course_No,s_course[j].course_name,s_course[j].s_xuefen,s_course[j].z_chengji);

}

}

//降序排列

else

{

for(j=0;j

{

for(k=j;k

{

if(s_course[j].z_chengji

{

temp_course.z_chengji=s_course[j].z_chengji;

s_course[j].z_chengji=s_course[k].z_chengji;

s_course[k].z_chengji=temp_course.z_chengji;

}

}

}

printf("\n\nxuehao course_number course_name xuefen chengji\n");

printf("\n----------------------------------------------------------------\n");

for(j=0;j

{

printf("\n%6s%10s%16s%13.1f%13.1f\n",s_course[j].xuehao,s_course[j].course_No,s_course[j].course_name,s_course[j].s_xuefen,s_course[j].z_chengji);

}

} //ch1

}

else

{

printf("illegal select");

getch();

}

}

}

void main()

{

while(1)

{

printf("\n>>>>>>>>>>>>>>>>\n\n");

printf("*

========================================================= * \n"); printf("* 1>input 2>cha zhao * \n");

printf("* 3>delete 4>paixu xianshi * \n");

printf("* 5>exit * \n");

printf("* * \n");

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

printf(" Please input which you want(1-5):");

ch=getch();

switch(ch)

{

case '1':input();break;

case '2':search(); getch();break;

case '3':delete();getch(); break;

case '4':sort(); getch();break;

case '5':exit(0);

default: continue;

}

}

}

六,总结

通过本次的实习,使我掌握了模块化设计方法,理解和运用结构化程序设计的思想和方法。学会了利用 流程图表示算法,提高了利用C 语言进行程序设计能力。

程序设计的过程,实际上是确定解决问题的详细步骤,而这个步骤通常称为流程,然后采用逐步细化的方法实现整个程序。

第一次设计程序,感觉压力很大,很难完成。但通过同学和老师的帮助最终还是完成了自己的程序设计,虽然程序还不是很完美,但能满足题目的各项要求,相信以后再次进行程序设计的时候会得心应手。最后感谢老师这么多天的教诲。谢谢!


相关文章

  • 中小学生学籍管理办法
  • 中小学生学籍管理办法 第一章 总则 第一条 为规范中小学生学籍管理,提高新形势下基础教育科学管理水平,保障适龄儿童.少年受教育的权利,根据<中华人民共和国教育法><中华人民共和国义务教育法>等有关法律,制订本办法. ...查看


  • 全国中小学生学籍管理办法
  • 全国中小学生 学籍管理办法 (试行) 第一章 第一条 总 则 为规范中小学生学籍管理,提高基础教育管理水 平,保障适龄儿童.少年受教育的权利,根据<中华人民共和国 教育法>.<中华人民共和国义务教育法>等有关法律法规 ...查看


  • 安徽省中小学学籍信息网络化系统管理办法
  • 关于印发安徽省中小学学籍信息网络化系统管理办法(试行)的 通知 发布日期:2012-03-02 皖教基[2012]1号 各市.县(区)教育局: 为进一步规范中小学学生学籍管理工作,管好用好中小学学籍信息网络化管理系统,提高教育管理信息化水平 ...查看


  • 义务教育学生学籍管理实施细则
  • 教基一[2014]310号 河南省教育厅 关于印发<河南省义务教育学生学籍管理实施细则(试行)>的通知 各省辖市.省直管县(市)教育局,厅直属实验学校: 为进一步规范义务教育学生学籍管理,提高信息化管理水平,根据教育部<中 ...查看


  • 晋源区中小学生学籍管理办法
  • 晋源区中小学生学籍管理办法 (试行) 第一章 总则 第一条 为规范我区中小学生学籍管理,进一步提升学籍管理科学化.规范化水平,保障适龄儿童.少年受义务教育的权利,根据国家.省.市教育行政部门有关中小学生学籍管理的规定,结合我区实际情况,制定 ...查看


  • 教育部学籍电子注册
  • 教育部关于印发<中等职业学历教育学生 学籍电子注册办法(试行)>的通知 教职成[2014]12号 各省.自治区.直辖市教育厅(教委),各计划单列市教育局,新疆生产建设兵团教育局: 现将<中等职业学历教育学生学籍电子注册办法 ...查看


  • 瑾山小学学生学籍管理制度
  • 学生学籍管理制度 瑾 山 小 学 2014年9月 瑾山小学学生学籍管理制度 为规范我校学生学籍管理,促进基础教育管理的科学化.规范化.制度化,保障适龄儿童.少年受教育的权利,建立良好的教育教学秩序,根据教育部<中小学生学籍管理办法&g ...查看


  • 关于印发[陕西省义务教育阶段学生学籍管理办法]的通知
  • 关于印发<陕西省义务教育阶段学生学籍管理办法>的通知 陕教规范[2014]2号 各市(区)教育局.韩城市教育局,石油普教管理中心: 根据教育部<中小学生学籍管理办法>精神,结合我省中小学生学籍管理实际,在广泛征求意见 ...查看


  • 浅析学籍档案信息化管理模式的意义
  • 浅析学籍档案信息化管理模式的意义 摘要: 随着我国教育事业的发展,学籍档案管理逐渐成为了我国学校教学档案的重要组成部分.因为他的繁杂性比较强,所以形成了比较专业的要求.如何更好的做好学校学籍档案的管理工作,为有关部门提供学员学籍档案信息,建 ...查看


  • 两亿中小学生学籍将"一人一号" 学籍号与身份证系统对接
  • 2013年08月23日 07:21:57 来源: 京华时报 16 昨天,教育部召开新闻发布会,从今年9月1日起,将实施<中小学生学籍管理办法>,将实行"一人一籍,籍随人走,终身不变"原则. 籍随人走终身不变 ...查看


热门内容