当前位置:文档之家› C语言之学生管理系统

C语言之学生管理系统

流程图:运行结果:程序源码:#include <stdio.h>#include <malloc.h>#include <string.h>#include <stdlib.h>#include<conio.h>#define LEN sizeof(struct student)//求字节数运算符struct student{char name[20];long int num;char sex[4];int age;char address[30];float score;struct student *next;//链表};//定义一个结构题int TOTAL_NUM = 0;//学生总数struct student *head = NULL;void mainmenu ();//主界面void record (); //记录数据void insert(struct student *stu); //插入数据void display(struct student *stu); //显示一个学生的信息void displayAll (); //显示所有学生的信息void query(); //查询学生信息void query_by_num(); //按学号查询学生信息void query_by_name();void readData (); //读取文件里学生的信息void writeData (); //向文件写入学生信息void freeAll (); //清空链表内容void del (); //删除学生信息void change (); //更改学生信息void sort();//排序void devise (struct student *p); //选择更改内容int main (void){mainmenu ();return 0;}//系统主菜单void mainmenu (){int choice;choice = -1;readData ();printf ("\t\t\t----------------------------------------------------\n"); printf ("\t\t\t| 欢迎使用通信工程专业学生信息管理系统|\n");printf ("\t\t\t----------------------------------------------------\n"); printf ("\t\t\t本程序需要在当前目录下建立student.txt才可正常运行\n");do{printf ("\n\n\n");printf ("\t\t\t--------------------------------------------\n");printf ("\t\t\t通信工程专业学生信息管理系统|\n");printf ("\t\t\t--------------------------------------------\n");printf ("\t\t\t[1]----录入学生信息|\n");printf ("\t\t\t[2]----浏览学生信息|\n");printf ("\t\t\t[3]----查询学生信息|\n");printf ("\t\t\t[4]----删除学生信息|\n");printf ("\t\t\t[5]----修改学生信息|\n");printf ("\t\t\t[6]----排序|\n");printf ("\t\t\t[0]----退出系统|\n");printf ("\t\t\t--------------------------------------------\n");printf ("请输入您的选择");scanf ("%d", &choice);switch (choice){case 0:writeData ();freeAll (); exit (0);case 1:record ();break;case 2:displayAll ();break;case 3:query ();break;case 4:del ();break;case 5:change ();break;case 6:sort ();break;default:printf ("\n无效选项!");break;}}while (choice != 0);}//录入学生信息void record (){struct student *p0;p0 = (struct student *)malloc(LEN);printf ("\t\t\t请输入学生的姓名:");scanf ("%s",p0->name);printf ("\t\t\t请输入学生的学号:");scanf ("%ld",&p0->num);printf ("\t\t\t请输入学生的性别:");scanf ("%s",p0->sex);printf ("\t\t\t请输入学生的年龄:");scanf ("%d",&p0->age);printf ("\t\t\t请输入学生的地址:");scanf ("%s",p0->address);printf ("\t\t\t请输入学生的成绩:");scanf ("%f",&p0->score);insert (p0);printf ("\t\t\t该学生的信息为:\n");printf ("\t\t\t-------------------------------------------------------------------------------\n");printf ("\t\t\t姓名\t学号\t\t年龄\t性别\t地址\t\t成绩\n");display (p0);}void insert (struct student *stu){struct student *p0, *p1, *p2;p1 = head;p0 = stu;if (head == NULL){head = p0;p0->next = NULL;}else{while ((p0->num > p1->num)&&(p1->next != NULL)){p2 = p1;p1 = p1->next;}if (p0->num <= p1->num){if (head == p1)head = p0;elsep2->next = p0;p0->next = p1;}else{p1->next = p0;p0->next = NULL;}}TOTAL_NUM++;}void display (struct student *p){printf ("\t\t\t%s\t%ld\t\t%d\t%s\t%s\t\t%f\n", p->name, p->num, p->age, p->sex,p->address, p->score);}//浏览学生信息void displayAll(){struct student *p;printf("\t\t\t学生总数:%d\n", TOTAL_NUM);p = head;if (head != NULL){printf("\t\t\t姓名\t学号\t\t年龄\t性别\t地址\t\t成绩\n");printf("\t\t\t-------------------------------------------------------------------------------\n");do{display(p);p = p->next;}while(p != NULL);}printf ("\n");}void query(){int choice;choice = -1;do{printf("\n");printf("--------------------\n");printf("| 按学号查询请按1 |\n");printf("| 按姓名查询请按2 |\n");printf("| 取消请按0 |\n");printf("+--------------------+\n");printf("请输入您的选择");scanf("%d", &choice);switch(choice){case 0:return;case 1:query_by_num();break;case 2:query_by_name();break;default:printf("\n无效选项!");break;}}while(choice != 0);}//按姓名查询学生信息void query_by_name(){char name[20];struct student *p1;printf("请输入学生的姓名");scanf("%s", name);if(head==NULL){printf("无学生记录\n");return;}p1=head;while(strcmp(name, p1->name) && p1->next!=NULL)p1=p1->next;if(!strcmp(name, p1->name)){printf("\t\t\t姓名\t学号\t\t年龄\t性别\t地址\t\t成绩\n");printf("\t\t\t-------------------------------------------------------------------------------\n");display(p1);}elseprintf("没有该学生记录请核对");}//按学号查询学生信息void query_by_num (){int num;struct student *p1;printf("请输入学生的学号");scanf("%ld", &num);if(head==NULL){printf("无学生记录\n");return;}p1 = head;while (num!=p1->num && p1->next!=NULL)p1 = p1->next;if (num == p1->num){printf ("\t\t\t姓名\t学号\t\t年龄\t性别\t地址\t\t成绩\n");printf ("\t\t\t-------------------------------------------------------------------------------\n");display (p1);}elseprintf ("\t\t\t没有该学生记录请核对");}//写入文件void writeData (){FILE* fp;//文件指针struct student *p;fp = fopen("1.txt", "w");if (!fp){printf("文件打开错误");return;}fprintf(fp,"%d\n", TOTAL_NUM);for(p = head; p!= NULL; p= p->next){fprintf(fp,"%s\t%ld\t%s\t%d\t%s\t%f\n", p->name, p->num, p->sex, p->age, p->address, p->score);}fclose (fp);}void freeAll (){struct student *p1, *p2;p1 = p2=head;while(p1){p2=p1->next;free (p1);p1 = p2;}}//读取文件void readData (){FILE* fp;//文件指针struct student *p1, *p2;fp = fopen("student.txt", "r");if (!fp){printf("文件打开错误");return;}fscanf(fp,"%d\n", &TOTAL_NUM);head = p1 = p2 = (struct student *)malloc(LEN);fscanf(fp,"%s\t%ld\t%s\t%d\t%s\t%f\n", p1->name, &p1->num, p1->sex,&p1->age, p1->address, &p1->score);while(!feof(fp)){p1 = (struct student *)malloc(LEN);fscanf(fp,"%s\t%ld\t%s\t%d\t%s\t%f\n", p1->name, &p1->num, p1->sex, &p1->age, p1->address, &p1->score);p2->next = p1;p2 = p1;}p2->next = NULL;fclose(fp);}//删除学生信息void del (){struct student *p1, *p2;long int num;if (head == NULL){printf("无学生记录\n");return;}printf("请输入您要删除的学生的学号");scanf("%ld", &num);p1 = head;while (num != p1->num && p1->next != NULL){p2 = p1;p1 = p1->next;}if(num == p1->num){if(p1 == head)head = p1->next;elsep2->next = p1->next;free(p1);TOTAL_NUM--;}elseprintf("没有该学生记录请核对\n");}void sort() //排序模块。

相关主题