#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define Maxsize 100
typedef struct
{
int jchk;
int zhyk;
int xxk;
int shyk;
int rwk;
}Lesson;
typedef struct
{
char name[10];
char sex[4];
char clas[10];
char mayor[20];
char number[20];
Lesson kch;
}Linelist;
typedef struct
{
Linelist data[Maxsize];
int length;
}Sqlist;
FILE *fp;
/*保存函数*/
void Save(Sqlist &L,int n)
{
int i=0;
system("cls");
if((fp=fopen("Sqlist.txt","w"))==NULL)
{
printf("文件打不开!\n");
exit(1);
}
while(i<n)
{
fprintf(fp,"\n姓名 性别 班级 专业 学号\n");
fprintf(fp,"%s%15s%15s%15s%15s",L.data[i].name,L.data[i].sex,L.data[i].clas,
L.data[i].mayor,L.data[i].number);
fprintf(fp,"\n基础课 专业课 选修课 实验课 人文课(学分)\n");
fprintf(fp,"%15d%15d%15d%15d%15d\n",L.data[i].kch.jchk,L.data[i].kch.zhyk,L.data[i].kch.xxk,
L.data[i].kch.shyk,L.data[i].kch.rwk);
i++;
}
fclose(fp);
printf("\n\n\n\n\n\n\n\t\t\t\t保存成功!!\n\a\a\a");
system("pause");
}
/*统计毕业学生*/
void Education(Sqlist L,int n)
{
int i,found=0;
system("cls");
for(i=0;i<n;i++)
if(L.data[i].kch.jchk>=50 && L.data[i].kch.zhyk>=50 && L.data[i].kch.xxk>=24
&& L.data[i].kch.shyk>=20 && L.data[i].kch.rwk>=8)
{
printf("\n姓名 性别 班级 专业 学号\n");
printf("%s %15s %15s %15s %15s",L.data[i].name,L.data[i].sex,
L.data[i].clas,L.data[i].mayor,L.data[i].number);
printf("\n");
printf("基础课 专业课 选修课 实验课 人文课(学分)\n");
printf("%d %15d %15d %15d %15d\n",
L.data[i].kch.jchk,L.data[i].kch.zhyk,L.data[i].kch.xxk,
L.data[i].kch.shyk,L.data[i].kch.rwk);
found=1;
}
if(found==0)
printf("\n\n\n\n\n\n\t\t\t所有学生均不达到标准,不能毕业!\n");
system("pause");
}
/*统计未毕业学生*/
void Diseducate(Sqlist L,int n)
{
int i,found=0;
system("cls");
for(i=0;i<n;i++)
if(L.data[i].kch.jchk<50 || L.data[i].kch.zhyk<50 || L.data[i].kch.xxk<24
|| L.data[i].kch.shyk<20 || L.data[i].kch.rwk<8)
{
printf("\n姓名 性别 班级 专业 学号\n");
printf("%s %15s %15s %15s %15s",L.data[i].name,L.data[i].sex,
L.data[i].clas,L.data[i].mayor,L.data[i].number);
printf("\n");
printf("基础课 专业课 选修课 实验课 人文课(学分)\n");
printf("%d %15d %15d %15d %15d\n",
L.data[i].kch.jchk,L.data[i].kch.zhyk,L.data[i].kch.xxk,
L.data[i].kch.shyk,L.data[i].kch.rwk);
found=1;
}
if(found==0)
printf("\n\n\n\n\n\n\t\t\t所有学生都合格!\n");
system("pause");
}
/*班级查找*/
void Scanclass(Sqlist L,int n)
{
char a[10];
int find=0,i;
system("cls");
printf("请输入班级:");
scanf("%s",a);
for(i=0;i<n;i++)
{
if(strcmp(a,L.data[i].clas)==0)
{
printf("\n姓名 性别 班级 专业 学号\n");
printf("%s %15s %15s %15s %15s",L.data[i].name,L.data[i].sex,
L.data[i].clas,L.data[i].mayor,L.data[i].number);
printf("\n基础课 专业课 选修课 实验课 人文课(学分)\n");
printf("%d %15d %15d %15d %15d\n",
L.data[i].kch.jchk,L.data[i].kch.zhyk,L.data[i].kch.xxk,
L.data[i].kch.shyk,L.data[i].kch.rwk);
find=1;
}
}
if(find==0)
printf("没有该班级!");
system("pause");
}
/*输入学生信息*/
void Studentinformation(Sqlist &L,int &n)
{
int i=n;
char J;
system("cls");
printf("是否输入学生信息(y,n):\n");
scanf("%s",&J);
do
{
if(J=='y')
{
printf("姓名 性别 班级 专业 学号\n");
scanf("%s %15s %15s %15s %15s",&L.data[i].name,&L.data[i].sex,
&L.data[i].clas,&L.data[i].mayor,&L.data[i].number);
printf("基础课 专业课 选修课 实验课 人文课(学分)\n");
scanf("%d %15d %15d %15d %15d",&L.data[i].kch.jchk,&L.data[i].kch.zhyk,
&L.data[i].kch.xxk,&L.data[i].kch.shyk,&L.data[i].kch.rwk);
i++;n++;
}
printf("是否继续输入?(y,n):");
scanf("%s",&J);
}while(J=='y');
printf("是否保存?(y,n):");
scanf("%s",&J);
if(J=='y')
Save(L,n);
}
/*初始化*/
void Initlist(Sqlist &L)
{
L.length=0;
}
/*按学号查找*/
int Binsearch(Sqlist &L,int n)
{
int i,j;
int low=0,high=n-1,mid;
char k[20];
Linelist temp;
system("cls");
for(i=1;i<n;i++)
{
temp=L.data[i];
j=i-1;
while(j>=0 && strcmp(temp.number,L.data[j].number)<0)
{
L.data[j+1]=L.data[j];
j--;
}
L.data[j+1]=temp;
}
printf("请输入学生学号:\n");
scanf("%s",k);
printf("\n");
while(low<=high)
{
mid=(low+high)/2;
if(strcmp(k,L.data[mid].number)==0)
{
printf("该学生信息如下:\n");
printf("\n\n姓名 性别 班级 专业 学号\n");
printf("%s %15s %15s %15s %15s",L.data[mid].name,L.data[mid].sex,
L.data[mid].clas,L.data[mid].mayor,L.data[mid].number);
printf("\n基础课 专业课 选修课 实验课 人文课\n");
printf("%d %15d %15d %15d %15d\n",L.data[mid].kch.jchk,L.data[mid].kch.zhyk,
L.data[mid].kch.xxk,L.data[mid].kch.shyk,L.data[mid].kch.rwk);
return (mid);
}
else if(strcmp(k,L.data[mid].number)<0)
high=mid-1;
else
low=mid+1;
}
printf("未找到!\n");
return -1;
}
/*删除*/
void Delelem(Sqlist &L,int &n)
{
int i,j;char J;
i=Binsearch(L,n);
if(i==-1)
printf("未找到!\n");
else
{
for(j=i;j<n;j++)
L.data[j]=L.data[j+1];
n--;
printf("删除成功!\n");
printf("是否保存?(y,n):");
scanf("%s",&J);
if(J=='y')
Save(L,n);
}
}
/*输出函数*/
void Display(Sqlist L,int n)
{
int i;
system("cls");
for(i=0;i<n;i++)
{
printf("\n\n\n姓名 性别 班级 专业 学号\n");
printf("%s %15s %15s %15s %15s",L.data[i].name,L.data[i].sex,
L.data[i].clas,L.data[i].mayor,L.data[i].number);
printf("\n");
printf("基础课 专业课 选修课 实验课 人文课(学分)\n");
printf("%d %15d %15d %15d %15d\n",
L.data[i].kch.jchk,L.data[i].kch.zhyk,L.data[i].kch.xxk,
L.data[i].kch.shyk,L.data[i].kch.rwk);
}
system("pause");
}
/*打开文件*/
int Open(Sqlist &L )
{
int i=0;
if((fp=fopen("Sqlist.txt","r"))==NULL)
{ printf("文件打不开!\n");
exit(1);
}
while(!feof(fp))
{
fscanf(fp,"\n姓名 性别 班级 专业 学号\n");
fscanf(fp,"%s%15s%15s%15s%15s",&L.data[i].name,&L.data[i].sex,
&L.data[i].clas,&L.data[i].mayor,&L.data[i].number);
fscanf(fp,"\n基础课 专业课 选修课 实验课 人文课(学分)\n");
fscanf(fp,"%d%15d%15d%15d%15d\n",&L.data[i].kch.jchk,
&L.data[i].kch.zhyk,&L.data[i].kch.xxk,
&L.data[i].kch.shyk,&L.data[i].kch.rwk);
i++;
}
fclose(fp);
return (i);
}
/*希尔排序*/
void Shellsort(Sqlist &L,int n)
{
int i,j,gap;char k;
system("cls");
Linelist temp;
gap=n/2;
printf("请输入课程类别,基础课(j) 专业课(z) 选修课(x) 实验课(s) 人文课(r)\n");
scanf("%s",&k);
if(k=='j')
{
while(gap>0)
{
for(i=gap;i<n;i++)
{
temp=L.data[i];
j=i-gap;
while(j>=0 && temp.kch.jchk<L.data[j].kch.jchk)
{
L.data[j+gap]=L.data[j];
j=j-gap;
}
L.data[j+gap]=temp;
}
gap=gap/2;
}
}
if(k=='z')
{
while(gap>0)
{
for(i=gap;i<n;i++)
{
temp=L.data[i];
j=i-gap;
while(j>=0 && temp.kch.zhyk<L.data[j].kch.zhyk)
{
L.data[j+gap]=L.data[j];
j=j-gap;
}
L.data[j+gap]=temp;
}
gap=gap/2;
}
}
if(k=='x')
{
while(gap>0)
{
for(i=gap;i<n;i++)
{
temp=L.data[i];
j=i-gap;
while(j>=0 && temp.kch.xxk<L.data[j].kch.xxk)
{
L.data[j+gap]=L.data[j];
j=j-gap;
}
L.data[j+gap]=temp;
}
gap=gap/2;
}
}
if(k=='s')
{
while(gap>0)
{
for(i=gap;i<n;i++)
{
temp=L.data[i];
j=i-gap;
while(j>=0 && temp.kch.shyk<L.data[j].kch.shyk)
{
L.data[j+gap]=L.data[j];
j=j-gap;
}
L.data[j+gap]=temp;
}
gap=gap/2;
}
}
if(k=='r')
{
while(gap>0)
{
for(i=gap;i<n;i++)
{
temp=L.data[i];
j=i-gap;
while(j>=0 && temp.kch.rwk<L.data[j].kch.rwk)
{
L.data[j+gap]=L.data[j];
j=j-gap;
}
L.data[j+gap]=temp;
}
gap=gap/2;
}
}
Display(L,n);
}
/*修改学分*/
void Change(Sqlist &L,int n)
{
system("cls");
char ch;int a;int i;char s[10];
i=Binsearch(L,n);
if(i==-1)
printf("未找到\n");
else
{
printf("确定修改么?(y or n):");
scanf("%s",&ch);
while(ch=='y')
{
if(ch=='y')
{
printf("请输入要修改的课程:");
scanf("%s",s);
printf("\n");
printf("请输入新学分:");
scanf("%d",&a);
printf("\n");
if(strcmp(s,"jchk")==0)
L.data[i].kch.jchk=a;
if(strcmp(s,"zhyk")==0)
L.data[i].kch.zhyk=a;
if(strcmp(s,"xxk")==0)
L.data[i].kch.xxk=a;
if(strcmp(s,"shyk")==0)
L.data[i].kch.shyk=a;
if(strcmp(s,"rwk")==0)
L.data[i].kch.rwk=a;
}
printf("需要继续修改么?继续(y),不继续(n):");
scanf("%s",&ch);
printf("\n");
}
printf("是否保存?(y,n):");
scanf("%s",&ch);
if(ch=='y')
Save(L,n);
}
}
/*主菜单*/
void menu(Sqlist &L,int n,int &m)
{
int c;
system("cls");
while(m==1)
{
printf("\t\t*=======================================================*\n");
printf("\t\t*\t\t**学分管理系统**\t\t\t*\n");
printf("\t\t*=======================================================*\n");
printf("\t\t*\t\t0.输入学生信息\t\t\t\t*");
printf("\n\t\t*\t\t1.修改学生信息\t\t\t\t*");
printf("\n\t\t*\t\t2.按分数排序\t\t\t\t*");
printf("\n\t\t*\t\t3.按学号查找\t\t\t\t*");
printf("\n\t\t*\t\t4.按班级查找\t\t\t\t*");
printf("\n\t\t*\t\t5.统计可以毕业的学生\t\t\t*");
printf("\n\t\t*\t\t6.统计未毕业的学生\t\t\t*");
printf("\n\t\t*\t\t7.查看所有信息\t\t\t\t*");
printf("\n\t\t*\t\t8.删除信息\t\t\t\t*");
printf("\n\t\t*\t\t9.保存文件\t\t\t\t*");
printf("\n\t\t*\t\t10.打开文件\t\t\t\t*");
printf("\n\t\t*\t\t11.退出系统\t\t\t\t*\n");
printf("\t\t*=======================================================*\n");
printf("\n\t\t Give your choice(0-11):");
scanf("%d",&c);
switch(c)
{
case 0:Studentinformation(L,n);break;
case 1:Change(L,n);break;
case 2:Shellsort(L,n);break;
case 3:Binsearch(L,n);break;
case 4:Scanclass(L,n);break;
case 5:Education(L,n);break;
case 6:Diseducate(L,n);break;
case 7:Display(L,n);break;
case 8:Delelem(L,n);break;
case 9:Save(L,n);break;
case 10:Open(L);break;
case 11:system("cls");printf("\n\n\n\n\n\t\t\t谢 谢 使 用 本 系 统 !\n");
printf("\n\n\n\n\t\t\t Please input anykey to quit!!\n\a\a");m=5;break;
default:
printf("\t\t\t Error!\n");
printf("\t\t\t please input again!:");
scanf("%d",&c);break;
}
}
}
/*主函数*/
void main()
{
int i,j=123;char ch;system("color 97");
printf("\t==============================================================\n");
printf("\t\t\t\t系 统 公告!\n");
printf("\t==============================================================\n");
printf("\n\t1、本系统是学分管理程序系统,首先要输入密码才能进入系统!");
printf("\n\n\t2、进入系统后请按提示操作!");
printf("\n\n\t3、注意:系统中要输入的课程均是汉语拼音!");
printf("\n\n\t4、基础课 专业课 选修课 实验课 人文课分别如下: ");
printf("\n\n\t5、jchk zhyk xxk shyk rwk");
printf("\n\n\t6、本系统制作者 : 李仁刚 舒世朝 李俊宏");
printf("\n\n\t7、 E_mail : ahhqlrg@163.com\t手机:13516474749");
printf("\n\n\t8、 Made By VC6.0++\t\t\t 2009年12月14日\n");
printf("\n\t============================================================\n");
printf("\t欢迎使用学分管理系统!\n\n");
printf("\t请输入密码(123):");
scanf("%d",&i);
int m=1;
Sqlist L;
Initlist(L);
system("color 3e");
do
{
if(i==j)
{
system("cls");
printf("是否打开原有文件(y or n)?");
scanf("%s",&ch);
if(ch=='y')
{
L.length=Open(L);
menu(L,L.length,m);
}
else
menu(L,L.length,m);
}
else
{
printf("密码错误!\n");
printf("please input again!");
scanf("%d",&i);
}
}while(m==1);
}