#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define Maxsize 100
struct user//用户名
{
char usename[20];
char password[20];
};
struct student //学生结构
{
int num;
char name[10];
int computer;
int english;
int math;
double average;
int score;
};
int Count = 0;
int g;
void input(struct student s[]);//新建输入学生
void output(struct student s[]);//输出学生成绩
void averagesort(struct student s[]);//平均分排序
void mathsort(struct student s[]);//数学排序
void englishsort(struct student s[]);//英语排序
void computersort(struct student s[]);//计算机排序
void sort(struct student s[]);//排序
void modify(struct student s[]);
void deleted(struct student s[]);
void search(struct student s[]);
void menu(struct student s[]);
void writetofile(struct student s[]);
void readfromfile(struct student s[]);
int Login(struct user sysuser);
int main()//主函数
{
struct user sysuser;
struct student s[Maxsize];
int n;
printf("Please select\n");
printf("1.Log in to the system\n");
printf("0.sign out\n");
printf("input n:\n");
scanf("%d",&n);
if(n==1)
{
if(Login(sysuser)==1)
{
printf("valid user!\n");
menu(s);
}else
{
printf("Invalid user!\n");
exit(0);
}
}else if(n==0)
{
return 0;
}
}
int Login(struct user sysuser)//登录系统
{
char tempname[20];
char temppassword[20];
int falg=0;
int num=0;
FILE *fp;
if((fp=fopen("login.txt","r"))==NULL)
{
printf("File open error!\n");
exit(0);
}
fscanf(fp,"%s",sysuser.usename);// 写在文件夹里
fscanf(fp,"%s",sysuser.password);
while(num<3)
{
printf("enter one user name. \n");
scanf("%s",tempname);
printf("Please enter your password.\n");
scanf("%s",temppassword);
num++;
if(strcmp(sysuser.usename,tempname)==0&&strcmp(sysuser.password,temppassword)==0)
{
falg=1;
break;
}
}
if(falg==1)
{
printf("Login successfully!\n");
return falg;
}else
return falg;
}
void menu(struct student s[])
{
int n;
while (1)
{
printf("--------------------------------------------\n");
printf("1.Input\n");
printf("2.Output\n");
printf("3.search\n");
printf("4.sort\n");
printf("5.modify\n");
printf("6.deleted\n");
printf("7.write to file\n");
printf("8.read for file\n");
printf("0.exit\n");
printf("--------------------------------------------\n");
scanf("%d", &n);
switch (n)
{
case 1:
input(s);//结构体
break;
case 2:
output(s);
break;
case 3:
search(s);
break;
case 4:
sort(s);
break;
case 5:
modify(s);
break;
case 6:
deleted(s);
break;
case 7:
writetofile(s);
break;
case 8:
readfromfile(s);
break;
case 0:
exit(1);
}
}
}
void input(struct student s[])
{
int i, n;
printf("input n:\n");
scanf("%d", &n);
if (Count == Maxsize)
{
printf("The arry is full\n");
}
for (i = 0; i < n; i++) {
printf("Please input the student's num:\n");
scanf("%d", &s[i].num);
printf("Please input the student's name :\n");
scanf("%s", s[i].name);
printf("Please input the student's computer score:\n");
scanf("%d", &s[i].computer);
printf("Please input the student's english score:\n");
scanf("%d", &s[i].english);
printf("Please input the student's math score:\n");
scanf("%d", &s[i].math);
Count++;
}
}
void output(struct student s[])
{
printf("num\tname\tmath\tenglish\tcomputer\taverage\tscore\t\n");
for (int i = 0; i < Count; i++)
{
s[i].average = (s[i].computer + s[i].math + s[i].english) / 3.0;
s[i].score = (s[i].computer + s[i].math + s[i].english);
printf("%d\t", s[i].num);
printf("%s\t", s[i].name);
printf("%d\t", s[i].math);
printf("%d\t", s[i].english);
printf("%d\t", s[i].computer);
printf(" %.2f\t", s[i].average);
printf(" %d\n",s[i].score);
}
}
void sort(struct student s[])
{
int n;
while (1) {
printf("--------\n");
printf("1.math\n");
printf("2.english\n");
printf("3.computer\n");
printf("4.average\n");
printf("0.exit\n");
printf("--------\n");
printf("Sorting method:", n);
scanf("%d", &n);
switch (n) {
case 1:mathsort(s); break;
case 2:englishsort(s); break;
case 3:computersort(s); break;
case 4:averagesort(s); break;
case 0:return;
}
}
}
void averagesort(struct student s[])
{
int i, j;
struct student temp;
for (i = 1; i < Count; i++) {
for (j = 0; j < Count - i; j++) {
if (s[j].average < s[j + 1].average)
{
temp = s[j];
s[j] = s[j + 1];
s[j + 1] = temp;
}
}
}
output(s);
}
void mathsort(struct student s[])
{
int i, j;
struct student temp;
for (i = 1; i < Count; i++)
{
for (j = 0; j < Count - i; j++)
{
if (s[j].math < s[j + 1].math)
{
temp = s[j];
s[j] = s[j + 1];
s[j + 1] = temp;
}
}
}
output(s);
}
void englishsort(struct student s[])
{
int i, j;
struct student temp;
for (i = 1; i < Count; i++)
{
for (j = 0; j < Count - i; j++)
{
if (s[j].english < s[j + 1].english)
{
temp = s[j];
s[j] = s[j + 1];
s[j + 1] = temp;
}
}
}
output(s);
}
void computersort(struct student s[])
{
int i, j;
struct student temp;
for (i = 1; i < Count; i++) {
for (j = 0; j < Count - i; j++) {
if (s[j].computer < s[j + 1].computer)
{
temp = s[j];
s[j] = s[j + 1];
s[j + 1] = temp;
}
}
}
output(s);
}
void modify(struct student d[])//修改成绩
{
int n,number,t;
printf("Please input student number\n");
scanf("%d",&number);
for(int i=0;i<Count;i++)
{
if(d[i].num==number)
{
while(1)
{
printf("Please input the subject you want to modify.\n");
printf("1.math\n");
printf("2.english\n");
printf("3.computer\n");
printf("0.exit\n");
scanf("%d",&n);
switch(n)
{
case 1:
printf("Revise the math score to\n");
scanf("%d",&t);
d[i].math=t;
break;
case 2:
printf("Revise the english score to\n");
scanf("%d",&t);
d[i].english=t;
break;
case 3:
printf("Revise the computer score to\n");
scanf("%d",&t);
d[i].computer=t;
break;
case 0:
menu(d);
break;
}
printf("Modification completed\n");
}
}
}
}
void deleted(struct student s[])
{
int i, n, j = -1;
printf("Deleted student number:\n");
scanf("%d", &n);
for (i = 0; i < Count; i++) {
if (s[i].num == n) {
j = i;
break;
}
}
if (j == -1) {
printf("No Found\n");
}
else {
for (i = j; i < Count - 1; i++) {
s[i] = s[i + 1];
}
}
Count--;
}
void search(struct student s[])
{
int i, flag = 0,N;
int number;
char name[20];
if (Count == 0) {
printf("Count of student is zero!\n");
return;
}
printf("1.input search number:\n\n");
printf("2.input search name:\n");
scanf("%d", &N);
if(N==1)
{
printf("Please input number:\n");
scanf("%d",&number);
for (i = 0; i < Count; i++)
{
if (s[i].num == number) {
flag = 1;
break;
}
}
}else if(N==2)
{
printf("Please input name:\n");
scanf("%s",name);
for (i = 0; i < Count; i++)
{
if (strcmp(s[i].name,name)==0) {
flag = 1;
break;
}
}
}else
{
printf("input error!\n");
}
if (flag == 1) {
printf("num\tname\tmath\tenglish\tcomputer\taverage\t\n");
printf("%d\t", s[i].num);
printf("%s\t", s[i].name);
printf("%d\t", s[i].math);
printf("%d\t", s[i].english);
printf("%d\t", s[i].computer);
printf(" %.2f\n", s[i].average);
}
else {
printf("Not Found\n");
}
}
void writetofile(struct student s[])
{
int i;
FILE *fp;
fp=fopen("chengji.txt","w");
fprintf(fp,"学号\t姓名\t数学成绩\t英语成绩\t计算机成绩\t平均成绩\n");
for(i=0;i<Count;i++)
fprintf(fp,"%d\t%s\t%d\t%d\t%d\t%.2f\t\n",s[i].num,s[i].name,s[i].math,s[i].english,s[i].computer,s[i].average);
}
void readfromfile(struct student s[])
{
struct student l[Maxsize];
int i;
FILE *fp;
if((fp=fopen("printing.txt","r"))==NULL){
printf("Error opening file\n");
exit(0);
}
for(i=0;i<Count;i++){
fscanf(fp,"%d ",&l[i].num);
fscanf(fp,"%s ",l[i].name);
fscanf(fp,"%d ",&l[i].math);
fscanf(fp,"%d ",&l[i].english);
fscanf(fp,"%d ",&l[i].computer);
fscanf(fp,"%lf ",&l[i].average);
}
if(fclose(fp)){
printf("cannot close file\n");
exit(0);
}
for(i=0;i<Count;i++){
printf("num:%d\n",l[i].num);
printf("name:%s\n",l[i].name);
printf("math:%d\n",l[i].math);
printf("english:%d\n",l[i].english);
printf("computer:%d\n",l[i].computer);
printf("average:%lf\n",l[i].average);
printf("********\n");
}
}