学生管理系统,插入一名学生的信息。
水平有限,求解。
#include "stdafx.h"#include "stdafx.h"#include "stdafx.h"#include <stdio.h>#include<string.h>#include<stdlib.h>#define N 3struct student_data{ int num; char name[10]; int age; int grade;}stud[N];void MainScree();FILE *fp;void save(){ FILE *fp; int i; if((fp=fopen("stu.txt","wb"))==NULL) { printf("cannot open file\n"); return; } for(i=0;i<N;i++) if(fwrite(&stud[i],sizeof(struct student_data),1,fp)!=1) printf("file weite error\n"); fclose(fp);}void search(){ printf("**********************************\n"); printf(" 1.1--------按学号查询\n"); printf(" 1.2--------按姓名查询\n"); printf(" 1.3--------按成绩查询\n"); printf("**********************************\n"); //FILE *fp; int k; int j,t,i; char m[20]; printf("请选择查询方法:\n"); scanf("%d",&k); if(k==1) { printf("您选择的是按学号查询,输入学号:\n"); scanf("%d",&j); for(i=0;i<N;i++) { //fread(&stud[i],sizeof(struct student_data),1,fp); if(stud[i].num==j) { printf("%d%s%d%d",stud[i].num,stud[i].name,stud[i].age,stud[i].grade); printf("\n"); } } } else if(k==2) { printf("您选择的是按姓名查询,输入姓名:\n"); scanf("%s",m); for(i=0;i<N;i++) { //fread(&stud[i],sizeof(struct student_data),1,fp); if(strcmp(stud[i].name,m)==0) { printf("%d%s%d%d",stud[i].num,stud[i].name,stud[i].age,stud[i].grade); printf("\n"); } } } else if(k==3) { printf("您选择的是按成绩查询,输入成绩:\n"); scanf("%d",&t); for(i=0;i<N;i++) { //fread(&stud[i],sizeof(struct student_data),1,fp); if(stud[i].grade<t) { printf("%d%s%d%d",stud[i].num,stud[i].name,stud[i].age,stud[i].grade); printf("\n"); } } } else { printf("请输入有效的选择!\n"); } //fclose(fp); MainScree();}void paixu(){ struct student_data temp; int i,j; for(j=0;j<N-1;j++) { for(i=0;i<N-1-j;i++) { if(stud[i].grade<stud[i+1].grade) { temp=stud[i]; stud[i]=stud[i+1]; stud[i+1]=temp; } } } for(i=0;i<N;i++) { printf("%d%s%d%d\n",stud[i].num,stud[i].name,stud[i].age,stud[i].grade); } MainScree();}void charu(){ int i,k,j; struct student_data temp; FILE* fp; printf("请输入k的值:\n"); scanf("%d",&k); printf("请输入k个学生的数据:\n"); for(i=N;i<N+k;i++) { scanf("%d%s%d%d",&stud[i].num,stud[i].name,&stud[i].age,&stud[i].grade); } if((fp=fopen("stu.txt","w"))==NULL) { printf("cannot open file\n"); return; } for(i=0;i<N+k;i++) { if(fwrite(&stud[i],sizeof(struct student_data),1,fp)!=1); printf("file write error!\n"); } for(j=0;j<N+k-1;j++) { for(i=0;i<N+k-1-j;i++) { if(stud[i].num>stud[i+1].num) { temp=stud[i]; stud[i]=stud[i+1]; stud[i+1]=temp; } } } for(i=0;i<N+k;i++) { fread(&stud[i],sizeof(struct student_data),1,fp); printf("%d%s%d%d\n",stud[i].num,stud[i].name,stud[i].age,stud[i].grade); } fclose(fp);}void tuichu(){}void shanchu(){}void MainScree(){ printf("**************************************\n"); printf(" 1----------查询\n"); printf(" 2----------排序\n"); printf(" 3----------插入\n"); printf(" 4----------删除\n"); printf(" 5----------退出\n"); printf("**************************************\n"); int i; printf("请选择:\n"); scanf("%d",&i); switch(i) { case 1:search();break; case 2:paixu();break; case 3:charu();break; case 4:shanchu();break; case 5:tuichu();break; default:{ printf("请输入有效选择!\n"); MainScree(); } }}int main(){ int i; printf("Please enter data of student:\n"); for(i=0;i<N;i++) scanf("%d%s%d%d",&stud[i].num,stud[i].name,&stud[i].age,&stud[i].grade); save(); FILE *fp; if((fp=fopen("stu.txt","rb"))==NULL) { printf("cannot open file\n"); } for(i=0;i<N;i++) { fread(&stud[i],sizeof(struct student_data),1,fp); printf("%d%s%d%d",stud[i].num,stud[i].name,stud[i].age,stud[i].grade); printf("\n"); } //fclose(fp); MainScree(); return 0;}
//=============================================================// 语法格式: file_write(TYPE * head)// 实现功能: 将所有链表信息存入文件// 参数: *head:保存的链表首址// 返回值: 无//=============================================================void file_write(TYPE * head){ TYPE *pf,*pb; STATE *pbstat; rewind(fp); //先保存学生信息头到文件开头 pbstat=(STATE *)malloc(sizeof(STATE)); if (head == NULL) pbstat->total = 0; else pbstat->total = gl_total; fwrite(pbstat,sizeof(STATE),1,fp); free(pbstat); //开始保存学生信息 while(head!=NULL) { head->total = gl_total; fwrite(head,sizeof(TYPE),1,fp); printf("%d\t\t%d\t%d\n",head->num,head->age,head->total); head=head->next; } }//=============================================================// 语法格式: file_write(TYPE * head)// 实现功能: 从文件读出所有链表信息,跟据信息内容创建一个链表// 参数: 无// 返回值: 返回创建好的链表首地址//=============================================================TYPE * file_read(){ TYPE *head,*pf,*pb; STATE *pbstat; int i,cont; rewind(fp); //首先读取学生信息头,获取学生总信息情况 pbstat=(STATE *)malloc(sizeof(STATE)); fread(pbstat,sizeof(STATE),1,fp); cont = pbstat->total; //得到总的学生信息个数 gl_total = pbstat->total; free(pbstat); //如果文件中没有学生信息,直接退出 if (0 == gl_total) { printf("文件内容为空!\n"); return NULL; } printf("文件内容:\n"); for(i=0;i<cont;i++) { pb=(TYPE *)malloc(sizeof(TYPE)); fread(pb,sizeof(TYPE),1,fp); printf("%d\t\t%d\t%d\n",pb->num,pb->age,pb->total); if (i == 0) { pf = head = pb; } else { pf->next=pb; pf=pb; } } pb->next=NULL; return(head);}