您的位置:首页 > 其它

学生成绩管理系统

2012-09-16 15:43 288 查看
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stddef.h>
#include "conio.h"
#define N 100
struct student
{
char name[20];
char number[10];
char sex[2];
unsigned int age;
char tel[20];
char address[20];
float math;
float english;
float physics;
float computer;
float sum;
}stu
;

char filename[30];//全局变量,用来保存要打开的文件名字
int input(struct student *arr,int n);
void display(struct student *arr,int n);
void sort(struct student *arr,int n);
int insert(struct student *arr,int n);
int Delete(struct student *arr,int n);
int add(struct student *arr,int n);
void WriteToText(struct student *arr,int n);

int main()
{
int n=0;
char selmenu;//功能编号
struct student stu
;//学生信息
do //循环显示界面
{
system("cls"); //清屏
printf("\n\n");
printf("欢迎使用学生管理系统\n");
printf("---------------------\n");
printf("学生成绩管理系统 \n\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\n");
printf("请输入功能选择编号:");
fflush(stdin); //清空输入缓冲区
scanf("%c",&selmenu);//选择的功能编号
switch(selmenu) //输入不同功能编号调用相应函数
{
case 1:input(stu,n);
break;
case 2:display(stu,n);
break;
case 3:sort(stu,n);
break;
case 4:insert(stu,n);
break;
case 5:Delete(stu,n);
break;
case 6:add(stu,n);//新增信息
break;
case 7:WriteToText(stu,n);//把记录写入到文件中
break;
case 8:exit(0);//退出
break;
}
}while(selmenu!='8'); //判断是否退出
printf("*^-^*谢谢使用*^-^*\n");
printf(" 完成任务 ");
getchar();
}

int input(struct student *arr,int n)//输入
{
int i = 0;
char ch; //接受指令
do //使用户控制输入学生成绩
{
system("cls");
printf("\n输入第%d个学生stddef.h 的信息:\n输入学生姓名: ",n+i);
scanf("%s",arr[n+i].name);
printf("\n学号: ");
scanf("%s",arr[n+i].number);
printf("\n性别: ");
scanf("%s",arr[n+i].sex);
printf("\n年龄: ");
scanf("%d",&arr[n+i].age);
printf("\n电话: ");
scanf("%s",arr[n+i].tel);
printf("\n地址: ");
scanf("%s",arr[n+i].address);
printf("\n数学成绩: ");
scanf("%f",&arr[n+i].math);
printf("\n英语成绩: ");
scanf("%f",&arr[n+i].english);
printf("\n物理成绩: ");
scanf("%f",&arr[n+i].physics);
printf("\n计算机成绩: ");
scanf("%f",&arr[n+i].computer);
i++;
fflush(stdin);//清空输入缓冲区
printf("\n是否继续输入(y/n)\n");
ch = getchar();

}while(ch != 'n'||ch!='N'); //判断用户指令,是否继续输入
return(n+i);
}

void display(struct student *arr,int n) //全部显示
{
system("pause");
int i;
printf("\t\t\t-------------------------------------------------------------\n");
printf("\t\t\tnumber,name,sex,age,tel,address,english,math,physics,computer\n");
printf("\t\t\t--------------------------------------------------------------\n");
for(i=1;i<n+1;i++)
{
printf("\t\t\t%-6s\t%-4s\t%-4s\t%-4d\t%-4s\t%-4s\t%-6.1f\t%-6.1f\t-6.1%f\t-6.1f\n",
arr[i-1].number,arr[i-1].name,arr[i-1].sex,arr[i-1].age,arr[i-1].tel,
arr[i-1].address,arr[i-1].english,arr[i-1].math,arr[i-1].physics,arr[i-1].computer);
if(i>1&&i%10==0)
{
printf("\t\t\t------------------------------------------------------\n");
printf("\t\t\t");
system("pause");
printf("\t\t\t------------------------------------------------------\n");
}
}
printf("\t\t\t");
system("pause");
}

void sort(struct student *arr,int n) //按总分排行输 入
{
int i,j,k; //变量i,j,最小数位置k

struct student t;//交换临时变量
arr
.sum=arr
.math+arr
.english+arr
.computer+arr
.physics;
if(n == 0) //判断数组中学生成绩是否存在
printf("无学生成绩,请先录入学生信息\n");
else
{
for(i = 0;i<n-1;i++)//按总分对学生成绩排序
{
k = i;
for(j = i+1;j<n;j++) //k为arr[i]到arr[count-1]中最小数的位置
if((arr[k].sum)<(arr[j].sum))
k = j;
if(k!=i) //如果最小数不是比价数 ,对调
{
t = arr[k];
arr[k] = arr[i];
arr[i] = t;
}
}
printf("\n总分排榜版: \n\n");
printf("\t姓名\t学号\t性别\t年龄\t电话\t地址\t数学\t英语\t物理\t计算机\t总分\t名次 词\n");
for(j = 0;j<n;j++) //输出按总分排榜后的学生成绩和名次
printf("\t%-6s\t%-4s\t%-4s\t%-4s\t%-4s\t%-4s\t%-6.1f\t%-6.1f\t-6.1%f\t-6.1f\t-6.1%f\t-5d\n",arr[j].name,arr[j].number, arr[j].sex,
arr[j].age,arr[j].tel,arr[j].address,arr[j].math,arr[j].english,arr[j].physics,arr[j].computer,arr[j].sum,j+1);
}
printf("\n回车键返回主程序\n");
fflush(stdin);
getchar();
}

int insert(struct student *arr,int n) //插入
{
system("cls");
printf("输入学生姓名: ");
scanf("%s",arr
.name);
printf("\n学号: ");
scanf("%s",arr
.number);
printf("\n性别: ");
scanf("%s",&arr
.sex);
printf("\n年龄: ");
scanf("%d",&arr
.age);
printf("\n电话: ");
scanf("%s",arr
.tel);
printf("\n地址: ");
scanf("%s",arr
.address);
printf("\n数学成绩 fflush(stdin);//清空输入缓冲区: ");
scanf("%f",&arr
.math);
printf("\n英语成绩: ");
scanf("%f",&arr
.english);
printf("\n物理成绩: ");
scanf("%f",&arr
.physics);
printf("\n计算机成绩: ");
scanf("%f",&arr
.computer);
fflush(stdin);
n++;
printf("\t\t\tinsert Successed!\n");
return(n);

}

int Delete(struct student *arr,int n)
{
int i=0,j;
char name[20]; // 学生姓名
system("cls"); //清屏函数
printf("\n请输入要删除的学生资料: \n");
printf("\n学生姓名: ");
scanf("%s",name);
printf("\n");
while(strcmp(arr[j].name,name)!=0&&i<n) i++;
if(i==n)
{
printf("\t\t\tnot find!\n");
return(n);
}
for(j=i;j<n-1;j++)
{
for(j=i;j<n-1;j++)
strcpy(arr[j].number,arr[j+1].number);
strcpy(arr[j].name,arr[j+1].name);
strcpy(arr[j].sex,arr[j+1].sex);
arr[j].age=arr[j].age;
strcpy(arr[j].tel,arr[j+1].tel);
strcpy(arr[j].address,arr[j+1].address);
arr[j].math=arr[j+1].math;
arr[j].english=arr[j+1].english;
arr[j].physics=arr[j+1].physics;
arr[j].computer=arr[j+1].computer;
}
printf("\t\t\tDelete Successed!\n"); /*返回成功信息*/
return(n-1);
}

int add(struct student *arr,int n)//新增
{
int i =0,num;
FILE *fp;
char filename[20];
printf("\t\tinput the filename:");
scanf("\t\t\t%s",filename);
if((fp=fopen(filename,"rb"))==NULL)
{
printf("\t\t\tcan not open the file\n");
printf("\t\t\t");
system("pause");
return(n);
}
fscanf(fp,"%d",&num);
while(i<num)
{
fscanf(fp,"%s%s%s%d%s%s%f%f%f%f\n",
arr[n+i].number,arr[n+i].name,arr[i-1].sex,&arr[i-1].age,arr[i-1].tel,arr[i-1].address,&arr[i-1].english,&arr[i-1].math,&arr[i-1].physics,&arr[i-1].computer);
i++;
}
n+=num;
fclose(fp);
printf("\t\t\tSuccessed!\n");
printf("\t\t\t");
system("pause");
return(n);
}

void WriteToText(struct student *arr,int n) /*将所有记录写入文件*/
{
int i=0;
FILE *fp; /*定义文件指针*/
char filename[20]; /*定义文件名*/
printf("\t\t\tWrite Records to a Text File\n"); /*输入文件名*/
printf("\t\t\tInput the filename:");
scanf("\t\t\t%s",filename);
if((fp= fopen(filename,"w"))==NULL) /*打开文件*/
{
printf("\t\t\tcann't open the file\n");
system("pause");
return;
}
fprintf(fp,"%d\n",n); /*循环写入数据*/
while(i<n)
{
printf("\t%-6s\t-4s\t%-4s\t%-4s\t%-4s\t%-4s\t%-6.1f\t%-6.1f\t%-6.1f\t%-6.1f\t-%5.1f\n",arr[i].name,arr[i].number,arr[i].sex,
arr[i].age,arr[i].tel,arr[i].address,arr[i].math,arr[i].english,arr[i].physics,arr[i].computer);
i++;
}
fclose(fp); /*关闭文件*/
printf("Successed!\n"); /*返回成功信息*/
}
有一个错误,是#endif without #if 头文件的错误,可能是程序中调用stddef.h这个文件的时候有问题!还没解决!

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息