实验要求
:
1.
实验前按实验报告格式要求,写出预实验报告,注意留出记录结果的空间。
2.
认真实验
,
注意记录
3.
撰写实验报告
.
按时上交
.
实验报告格式:
实验
*
***** ***** *****
一、
实验目的
照抄实验指导的内容。
二、
实验步骤和内容
包括:
1
.实验题目要求。
2
.源程序清单
3
.预期结果
3
.上机执行或调试结果:包括原始数据、相应的运行结果和必要的说明
三、
实验体会
调试中遇到的问题及解决办法;若最终未完成调试,要试着分析原因;调试程
序的心得与体会;其他算法的存在与实践;对课程及实验的建议等。
/*学生信息管理系统C语言源代码student.c*/#include <stdio.h> /*包含输入/输出头文件*/
#include <string.h> /*包含字符串处理头文件*/
#include <stdlib.h>
#define MAXSIZE 100 /*能够处理的学生总人数,可以随意修改*/
typedef struct {/*用于存放生日信息的结构体*/
int year
int month
int day
}Date
typedef struct Stud{/*用于存放学生信息的结构体*/
char Num[12]/*学号*/
char Name[10] /*姓名*/
char Sex[2] /*性别*/
Date Birthday /*出生日期*/
float English, DataStructure, CPlusPlus /*三门课成绩*/
float Sum, Average /*总成绩、平均成绩*/
}Student
char CurFile[40] /*存放当前正在 *** 作的磁盘文件的文件名*/
int IsOpen=0 /*当前是否有磁盘文件被打开标志*/
int found=0 /*在查找学生信息时是否找到标志*/
Student stud[MAXSIZE] /*用于存放读入内存中的所有学生信息的全局数组*/
int Index=0 /*存放实际学生人数的全局变量*/
/*各自定义函数原型声明*/
void Create() /*新建学生信息文件*/
void Open() /*打开学生信息文件,并读取学生信息到全局数组stud中*/
void Display()/*显示学生信息*/
void Search() /*查询学生信息*/
int SearchNum(char* Num) /*按学号查询学生信息*/
int SearchName(char* Name)/*按姓名查询学生信息*/
void Append() /*添加学生信息*/
void Modify() /*修改学生信息*/
void Delete() /*删除学生信息*/
void Total() /*统计所有学生某一科目总成绩*/
void Sort() /*学生信息排序*/
void Backup() /*备份学生信息*/
void menu() /*系统功能菜单*/
{
int choice/*用于保存用户对功能菜单的选择结果*/
for( )
{ /*显示系统功能菜单*/
printf("\n****************************************************\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("************ 9.学生信息排序 *****************\n")
printf("************ 10.备份学生信息 *****************\n")
printf("************ 0.退出系统 *****************\n")
printf("****************************************************\n")
printf("请选择要执行的 *** 作(0~8):_")
scanf("%d", &choice)
switch(choice){
case 1: Create()break
case 2: Open()break
case 3: Display()break
case 4: Search()break
case 5: Append()break
case 6: Modify()break
case 7: Delete()break
case 8: Total()break
case 9: Sort()break
case 10: Backup()break
case 0: return
default: printf("选择错误!请重新选择。\n")
}/*switch结束*/
}/*for结束*/
}
void ReOrEx()/*在用户执行完一项系统功能后,可以选择:是继续运行系统,还是退出系统*/
{
int n
printf("\n****************************************************\n")
printf("*************** 1. 返回上级菜单 **************\n")
printf("*************** 0. 退出系统 **************\n")
printf("****************************************************\n")
printf(" 请选择(1/0)?_")
scanf("%d",&n)
if(n==0)
{
printf("\n****************************************************\n")
printf("************* 谢谢使用本系统! ***************\n")
printf("****************************************************\n")
exit(1)
}
}
void main()
{
printf("****************************************************\n")
printf("********* 欢迎使用学生信息管理系统! *********\n")
printf("****************************************************\n")
system("pause")
menu()/*系统功能以菜单的形式提供给用户*/
printf("\n****************************************************\n")
printf("************* 谢谢使用本系统! ***************\n")
printf("****************************************************\n")
}/*main函数结束*/
/*各自定义函数实现代码*/
int New(char* FileName)//创建磁盘文件
{
FILE *fp
if((fp=fopen(FileName,"w"))==NULL)
{
return 0
}
else
{
fclose(fp)
Index=0
return 1
}
}
void Create()/*新建学生信息文件*/
{
char FileName[40]
printf("请输入新建文件的名称:")
scanf("%s",&FileName)
if(strcmp(FileName,"studentbackup"))
{
strcat(FileName,".dat")
if(!New(FileName))
printf("%s文件创建失败!\n",FileName)
else
{
strcpy(CurFile,FileName)
printf("%s文件创建成功!\n",FileName)
}
}
else
{
printf("%s是备份文件,禁止创建与此文件同名的文件!\n",FileName)
}
ReOrEx()
}
void Open()/*打开学生信息文件*/
{
char FileName[40]
printf("请输入要打开的数据文件的名称:")
scanf("%s",&FileName)
if(strcmp(FileName,"studentbackup"))
{
strcat(FileName,".dat")
if(IsOpen==0)
{
FILE *fp
if((fp=fopen(FileName,"rb"))==NULL)
{
printf("%s文件打开失败!\n",FileName)
}
else
{
IsOpen=1
Index=0
while(!feof(fp))
{
fread(&stud[Index],sizeof(struct Stud),1,fp)
Index++
}
Index--
printf("学生总人数为:%d\n",Index)
fclose(fp)
printf("%s文件打开成功!\n",FileName)
strcpy(CurFile,FileName)
}
}
else
printf("%s文件已经打开!\n",FileName)
}
else
printf("%s是备份文件,禁止打开此文件!\n",FileName)
ReOrEx()
}
void Display()/*显示全部学生信息*/
{
int i
if(!strcmp(CurFile,""))
{
printf("当前并未打开或新建文件,无法显示!\n")
}
else
{
printf("\n 显示所有学生成绩信息\n\n")
printf("%--12s%--11s%--5s%--14s%--12s%--15s%--12s%--12s%--12s\n","Num","Name","Sex","Birthday",
"English","DataStructure","CPlusPlus","Sum","Average")
for(i=0i<Indexi++)
{
printf("%--12s%--11s%--5s%4d/%2d/%2d%10.2f%15.2f%12.2f%12.2f%12.2f\n\n",stud[i].Num,
stud[i].Name,stud[i].Sex,stud[i].Birthday.year,stud[i].Birthday.month,
stud[i].Birthday.day,stud[i].English,stud[i].DataStructure,stud[i].CPlusPlus,
stud[i].Sum,stud[i].Average)
}
}
ReOrEx()
}
int SearchNum(char* Num)/*按学号查询学生信息*/
{
int i
for(i=0i<Indexi++)
{
if(!strcmp(stud[i].Num,Num))
{
printf("对应此学号的学生信息存在!\n")
found=1
return i
}
}
printf("没有此学生的信息!\n")
found=0
return 0
}
int SearchName(char* Name)/*按姓名查询学生信息*/
{
int i
for(i=0i<Indexi++)
{
if(!strcmp(stud[i].Name,Name))
{
printf("对应此学号的学生信息存在!\n")
found=1
return i
}
}
printf("没有此学生的信息!\n")
found=0
return 0
}
void Search()/*查询学生信息*/
{
int n
int i
char Num[12]
char Name[10]
if(!strcmp(CurFile,""))
{
printf("当前并未打开或新建文件,无法查询!\n")
}
else
{
printf("\n 查询某一学生信息\n")
printf("****************************************************\n")
printf("*************** 1. 按学号查询 *************\n")
printf("*************** 2. 按姓名查询 *************\n")
printf("****************************************************\n")
printf(" 请选择(1/2)?_")
scanf("%d",&n)
if(n==1)
{
printf("请输入学生学号:\n")
scanf("%s",Num)
i=SearchNum(Num)
}
else if(n==2)
{
printf("请输入学生姓名:\n")
scanf("%s",&Name)
i=SearchName(Name)
}
printf("该学生的具体信息为:\n\n")
printf("%--12s%--11s%--5s%--14s%--12s%--15s%--12s%--12s%--12s\n","Num","Name","Sex","Birthday",
"English","DataStructure","CPlusPlus","Sum","Average")
printf("%--12s%--11s%--5s%4d/%2d/%2d%10.2f%15.2f%12.2f%12.2f%12.2f\n\n",stud[i].Num,
stud[i].Name,stud[i].Sex,stud[i].Birthday.year,stud[i].Birthday.month,
stud[i].Birthday.day,stud[i].English,stud[i].DataStructure,stud[i].CPlusPlus,
stud[i].Sum,stud[i].Average)
}
ReOrEx()
}
void AddData()/*添加一条学生信息*/
{
char Num[12]
char Name[10]
char Sex[2]
int Year,Month,Day
float English,DataStructure,CPP
int location
if(Index>=MAXSIZE)
{
printf("错误! 学生信息已满,不能添加!\n")
}
else
{ printf("执行添加学生信息 *** 作!\n")
printf("\n请输入学生学号:")
scanf("%s",Num)
location=SearchNum(Num)
if (!found)
{
printf("可以进行添加 *** 作!\n")
printf("\n请输入学生姓名:")
scanf("%s",Name)
printf("\n请输入学生性别:")
scanf("%s",&Sex)
printf("\n请输入学生出生年份:")
scanf("%d",&Year)
printf("\n请输入学生出生月份:")
scanf("%d",&Month)
printf("\n请输入学生出生日:")
scanf("%d",&Day)
printf("\n请输入学生英语成绩:")
scanf("%f",&English)
printf("\n请输入学生数据结构成绩:")
scanf("%f",&DataStructure)
printf("\n请输入学生C++成绩:")
scanf("%f",&CPP)
printf("\n")
strcpy(stud[Index].Num,Num)
strcpy(stud[Index].Name,Name)
strcpy(stud[Index].Sex,Sex)
stud[Index].Birthday.year=Year
stud[Index].Birthday.month=Month
stud[Index].Birthday.day=Day
stud[Index].English=English
stud[Index].DataStructure=DataStructure
stud[Index].CPlusPlus=CPP
stud[Index].Sum=English+DataStructure+CPP
stud[Index].Average=stud[Index].Sum/3
Index++
printf("插入一条学生信息 *** 作成功!\n")
}
else printf("不能进行添加学生信息 *** 作!\n")
}
}
void Save(char* FileName)/*学生信息存盘*/
{
FILE *fp
int i
if((fp=fopen(FileName,"wb"))==NULL)
{
printf("文件打开失败!")
return
}
for(i=0i<Indexi++)
{
fwrite(&stud[i],sizeof(struct Stud),1,fp)
}
fclose(fp)
}
void Append()/*添加学生信息*/
{
if(!strcmp(CurFile,""))
{
printf("当前并未打开或新建文件,无法添加!\n")
}
else
{
AddData()
Save(CurFile)
}
ReOrEx()
}
void ModifyData()/*修改一条学生信息*/
{
char Num[12]
char Name[10]
char Sex[2]
float English,DataStructure,CPP
int Year,Month,Day
int location
printf("\n执行修改学生信息 *** 作!\n\n")
printf("请输入将要修改的学生的学号:")
scanf("%s",Num)
location=SearchNum(Num)
if (found)
{
printf("可以进行修改学生信息 *** 作!\n")
printf("\n请输入学生姓名:")
scanf("%s",Name)
printf("\n请输入学生性别:")
scanf("%s",&Sex)
printf("\n请输入学生出生年份:")
scanf("%d",&Year)
printf("\n请输入学生出生月份:")
scanf("%d",&Month)
printf("\n请输入学生出生日:")
scanf("%d",&Day)
printf("\n请输入学生英语成绩:")
scanf("%f",&English)
printf("\n请输入学生数据结构成绩:")
scanf("%f",&DataStructure)
printf("\n请输入学生C++成绩:")
scanf("%f",&CPP)
printf("\n")
strcpy(stud[location].Num,Num)
strcpy(stud[location].Name,Name)
strcpy(stud[location].Sex,Sex)
stud[location].Birthday.year=Year
stud[location].Birthday.month=Month
stud[location].Birthday.day=Day
stud[location].English=English
stud[location].DataStructure=DataStructure
stud[location].CPlusPlus=CPP
stud[location].Sum=English+DataStructure+CPP
stud[location].Average=stud[Index].Sum/3
printf("执行修改学生信息 *** 作成功!\n")
}
else printf("不能进行修改学生信息 *** 作!\n")
}
void Modify()/*修改学生信息*/
{
if(!strcmp(CurFile,""))
{
printf("当前并未打开或新建文件,无法修改!\n")
}
else
{
ModifyData()
Save(CurFile)
}
ReOrEx()
}
int DeleteData()/*删除一条学生信息*/
{
char Num[12]
int location,i
printf("\n 执行删除学生信息 *** 作!\n\n")
printf("警告!学生信息一旦删除,将不可恢复。请小心使用该 *** 作!\n\n")
printf("请输入将要删除的学生的学号:\n")
scanf("%s",Num)
location=SearchNum(Num)
if(found)
{
if(location!=MAXSIZE)
{
for(i=locationi<MAXSIZEi++)
{
strcpy(stud[i].Num,stud[i+1].Num)
strcpy(stud[i].Name,stud[i+1].Name)
strcpy(stud[i].Sex,stud[i+1].Sex)
stud[i].Birthday.year=stud[i+1].Birthday.year
stud[i].Birthday.month=stud[i+1].Birthday.month
stud[i].Birthday.day=stud[i+1].Birthday.day
stud[i].English=stud[i+1].English
stud[i].DataStructure=stud[i+1].DataStructure
stud[i].CPlusPlus=stud[i+1].CPlusPlus
stud[i].Sum=stud[i+1].Sum
stud[i].Average=stud[i+1].Average
}
}
Index--
return 1
}
return 0
}
void Delete()/*删除学生信息*/
{
if(!strcmp(CurFile,""))
{
printf("当前并未打开或新建文件,无法删除!\n")
}
else
{
if(DeleteData())
{
Save(CurFile)
printf("删除一条学生信息 *** 作成功!\n")
}
else
{
printf("不能进行删除 *** 作!\n")
printf("删除一条学生信息 *** 作失败!\n")
}
}
ReOrEx()
}
float GetOneCourseSum(int n)/*计算所有学生某一科目的总成绩*/
{
float N=0
int i
switch(n){
case 1://计算英语总成绩
{
for(i=0i<Indexi++)
{
N+=stud[i].English
}
}
break
case 2://计算数据结构总成绩
{
for(i=0i<Indexi++)
{
N+=stud[i].DataStructure
}
}
break
case 3://计算C++总成绩
{
for(i=0i<=Indexi++)
{
N+=stud[i].CPlusPlus
}
}
break
}
return N
}
float GetOneCourseAverage(int n)/*计算所有学生某一科目的平均成绩*/
{
float temp=0
temp=GetOneCourseSum(n)/Index
return temp
}
void Total()//统计某一科目总成绩
{
int x
if(!strcmp(CurFile,""))
{
printf("当前并未打开或新建文件,无法统计成绩!\n")
}
else
{
printf("\n 统计某一科目总成绩及平均成绩\n")
printf("\n")
printf("****************************************************\n")
printf("***1. 统计《英语》课程总成绩及平均成绩 ***\n")
printf("***2. 统计《数据结构》课程总成绩及平均成绩 ***\n")
printf("***3. 统计《C++》课程总成绩及平均成绩***\n")
printf("****************************************************\n")
printf(" 请选择(1-3)?_")
scanf("%d",&x)
switch(x)
{
case 1:
printf("\n英语总成绩为:%5.2f\n\n",GetOneCourseSum(1))
printf("英语平均成绩为:%5.2f\n",GetOneCourseAverage(1))
break
case 2:
printf("\n数据结构总成绩为:%5.2f\n\n",GetOneCourseSum(2))
printf("数据结构平均成绩为:%5.2f\n",GetOneCourseAverage(2))
break
case 3:
printf("\nC++总成绩为:%5.2f\n\n",GetOneCourseSum(3))
printf("c++平均成绩为:%5.2f\n",GetOneCourseAverage(3))
break
default: printf("选择错误!\n")
}
}
ReOrEx()
}
void Bubble(int N)/*冒泡排序*/
{
Student temp
int change=1
int i,j
switch(N){
case 1://按英语成绩排序
{
for(i=Index-1i>=1 &&change--i)
{
change=0
for(j=0j<i++j)
if(stud[j].English>stud[j+1].English)
{
strcpy(temp.Num,stud[j].Num)
strcpy(temp.Name,stud[j].Name)
strcpy(temp.Sex,stud[j].Sex)
temp.Birthday.year=stud[j].Birthday.year
temp.Birthday.month=stud[j].Birthday.month
temp.Birthday.day=stud[j].Birthday.day
temp.English=stud[j].English
temp.DataStructure=stud[j].DataStructure
temp.CPlusPlus=stud[j].CPlusPlus
temp.Sum=stud[j].Sum
temp.Average=stud[j].Average
strcpy(stud[j].Num,stud[j+1].Num)
strcpy(stud[j].Name,stud[j+1].Name)
strcpy(stud[j].Sex,stud[j+1].Sex)
stud[j].Birthday.year=stud[j+1].Birthday.year
stud[j].Birthday.month=stud[j+1].Birthday.month
stud[j].Birthday.day=stud[j+1].Birthday.day
这是学生信息系统一部分,想要的话把你邮箱留下,我把全部发给你
#include "stdio.h"#define N 10
typedef struct
{char name[20]
char xuehao[20]
int xuhao[5]
float shuxue[10]
float yingyu[10]
float jisuanji[10]
float sum[10]
float average[10]
}user
main()
{user sp[N],temp
int i
printf("enter xinxi\n")
for(i=0i<Ni++)
{gets(sp[i].name)gets(sp[i].xuehao)
gets(sp[i].xuhao)gets(sp[i].shuxue)
gets(sp[i].yingyu)gets(sp[i].jisuanji)
sum=sp[i].shuxue+sp[i].yingyu+sp[i].jisuanji
average=sum/3
}
getsort(sp)
printf("after sorted: \n")
for(i=0i<Ni++)
printf("%d\t%s\t%s\t%d\t%d\t%d\t%d\t%d\n",sp[i].xuhao,sp[i].xuehao,sp[i].name,sp[i].yingyu,sp[i].jisuanji,sp[i].shuxue,sp[i].sum,sp[i].average)
}
getsort(user *sp)
{int i,j
user temp
for(i=0i<N-1i++)
for(j=i+1j<Nj++)
if(sp[i].sum<sp[j].sum)
{temp=sp[i].sum
sp[i].sum=sum[j].sum
sp[j].sum=temp}
我没运行,可能对吧,你试一下
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)