学生信息管理系统
来源:互联网 发布:java divide向上保留 编辑:程序博客网 时间:2024/06/10 10:25
半个月前写的程序,因为军训的缘故没写完。当时写的时候懒得一个个函数分别测试,今天编译的时候才发现各种bug,搞了半天还是搞不定,十分烦躁,遂决定先搁着一段时间,等啥时候心情好了再debug。
同时,这个项目了我很大的教训,以后写大项目时一定要分别测试!
////////////////////////////////////////////////////////////////
更新1:忙过了开学终于有时间debug了,搞了一上午终于基本上搞定。很多地方懒得考虑错误输出了,所以鲁棒性应该会很弱,但好歹第一次写完一个几百行的程序,还是很开心的。
//head.h#define _CRT_SECURE_NO_WARNINGS #include<stdio.h>#include <string.h> #include<stdlib.h>#define ALL 50 #define LEN sizeof(struct student)typedef struct student { // 不要写成typeof int number; char name[15]; double Chinese; double Math; double English; double sum; struct student *next;}Student;Student * head;Student* EDIT(Student* head);Student* DELETE(Student* head);Student* ADD(Student* head);Student* FIND(Student* head);Student* SHOW(Student* head);void COUNT(Student* head);Student* ORDER(Student* head);Student* INPUT(Student* head);void OUTPUT(Student* head);void INITIAL(void);void PASSWORD(void);void FREE(void);///////////////////////////////////////////////////////////////////////////////////main.cpp#include"head.h"int main(void){ //PASSWORD(); INITIAL(); return 0;} //main函数里定义的变量不是全局变量void PASSWORD(void){ char password[10];//不能使用字符串指针形式,因为那样并没有初始化,第15行会报错 char* right_password = "12345"; printf("Welcome!\n"); printf("Please enter your password:"); scanf("%s", password);//passwordb本身就是地址了,不用再加& getchar(); int i = 0; while (strcmp(password, right_password)!=0 && i<3) { printf("wrong password!please enter again:"); i++; scanf("%s", password); getchar();//处理回车符 } if (i == 3)//小心 == 写成 = { printf("you enter too much wrong password!\n"); exit(0); } if (i < 3) { printf("succeed!\n"); }}void INITIAL(void){ while (1) { printf("please choose what fuction you want to use:\n" "1.ADD 2.SHOW 3.DELETE 4.EDIT \n" "5.FIND 6.COUNT 7.ORDER 8.INPUT\n" "9.OUTPUT 0.QUIT\n");char choice;scanf("%c", &choice);while (getchar() != '\n') continue; switch (choice) { case'1': head = ADD(head); break; case'3': head = DELETE(head); break; case'4': head = EDIT(head); break; case'2': head = SHOW(head); break; case'5': head = FIND(head); break; case'6': COUNT(head); break; case'7': head = ORDER(head); break; case'8': head=INPUT(head); break; case'9': OUTPUT(head); break; case'0': FREE(); exit(0); default: printf("Invalid enter,please enter again\n"); break; } }}Student* ADD(Student* head) //直接传变量传递的是副本!! { while (1) { Student* temp = (Student*)malloc(LEN); printf("please enter sutdents' information,enter 0 to exit!\n"); tag1: printf("please enter student's number:"); int a = -1; scanf("%d", &a); //防止退出时改变上一个number的值 while (getchar() != '\n') continue; if (a) { temp->number = a; if (temp->number < 0) { printf("Be serious!\n"); goto tag1; } } else break; Student *p1 = head, *p2 = head;//为了不改变head while (p1 != NULL) { if (p1->number != temp->number) { p1 = p1->next; } else { printf("this number has already existed,please enter again\n"); goto tag1; } } printf("please enter stduent's name:"); scanf("%s", &(temp->name)); while (getchar() != '\n') continue; printf("please enter stduent's English grade:"); scanf("%lf", &(temp->English)); while (getchar() != '\n') continue; printf("please enter stduent's Chinese grade:"); scanf("%lf", &(temp->Chinese)); while (getchar() != '\n') continue; printf("please enter stduent's Math grade:"); scanf("%lf", &(temp->Math)); while (getchar() != '\n') continue; temp->sum = temp->English + temp->Chinese + temp->Math; temp->next = NULL; if(head==NULL) head = temp; else { while(p2->next != NULL) p2 = p2->next; p2->next = temp; temp = NULL; } } return head;}Student* FIND(Student* head){Student* p1=head;printf("please enter student's number you want to search:");int num;scanf("%d", &num);getchar();while (p1->number != num&&p1->next != NULL){ p1 = p1->next;}if (num == p1->number){ printf("number name English Chinese Math sum\n"); printf("%-10d%-10s%-10.1f%-10.1f%-10.1f%-10.1f\n", p1->number, p1->name, p1->English, p1->Chinese, p1->Math, p1->sum);}if (num != p1->number) printf("this stduent doesn't exist\n");return head;}Student* EDIT(Student* head){ Student* p1 = head; printf("please enter student's number you want to edit:"); int num; scanf("%d", &num); getchar(); while (p1->number != num&&p1->next != NULL) { p1 = p1->next; } if (num == p1->number) { while (1) { printf("please enter which part you want to edit(enter EXIT to exit):"); char part[20]; scanf("%s", part); getchar(); if (strcmp(part, "name")==0)//strcmp相等返回0 { printf("What do you want to change into:"); scanf("%s", &p1->name); getchar(); } else if(strcmp(part, "Chinese")==0) { printf("What do you want to change into:"); scanf("%lf", &p1->Chinese); getchar(); } else if(strcmp(part, "English")==0) { printf("What do you want to change into:"); scanf("%lf", &p1->English); getchar(); } else if (strcmp(part, "Math")==0) { printf("What do you want to change into:"); scanf("%lf", &p1->Math); getchar(); } else if (strcmp(part, "EXIT")==0) { break; } else { printf("Be serious!\n"); break; } } } if (num != p1->number) printf("this student doesn't exist\n"); return head;}void COUNT(Student* head){ int count = 1; Student* p1 = head; if (p1 == NULL) printf("No stduent\n"); else { while (p1->next != NULL) { p1 = p1->next; count++; } printf("totally %d stduents\n", count); } return ;}Student* DELETE(Student* head){ printf("please enter which student you want to delete:"); int num; scanf("%d", &num); getchar(); Student* p1 = head, *p2=NULL;//*p2=NULL是无意义的,然而由于231行如果没进入循环的话242行p2会出现未定义,多以必须提前定义p2 while (p1->number != num && p1->next != NULL) { p2 = p1; p1 = p1->next; } if (num == p1->number) { if (p1 == head)//记得考虑首节点情况 head = p1->next; else p2->next = p1->next; } else printf("this stduent doesn't exist\n"); return head;}Student* SHOW(Student* head){ Student* p1 = head; if (p1 == NULL) printf("no student!\n"); else { printf("number name English Chinese Math sum\n"); printf("%-10d%-10s%-10.1f%-10.1f%-10.1f%-10.1f\n", p1->number, p1->name, p1->English, p1->Chinese, p1->Math, p1->sum); while (p1->next != NULL) { p1 = p1->next; printf("%-10d%-10s%-10.1f%-10.1f%-10.1f%-10.1f\n", p1->number, p1->name, p1->English, p1->Chinese, p1->Math, p1->sum); } } return head;}Student* INPUT(Student* head){ printf("please enter the name of file you want to input:"); char name[50]; scanf("%s", name); getchar(); FILE * fp1; if ((fp1 = fopen(name, "r+")) == NULL) { printf("can't open this file!\n"); return head; } int test; while (1) //如果用feof判断,则会多一次循环 { Student* temp = (Student*)malloc(LEN);//malloc若放在外面 head会随着temp变化 test=fscanf(fp1, "%d %s %lf %lf %lf %lf", //fscanf不能加格式限定符 &temp->number, temp->name, &temp->English, &temp->Chinese, &temp->Math, &temp->sum);//记住加& temp->next = NULL; if (test != 6) break; Student* p2 = head; if (head == NULL) head = temp; else { while (p2->next != NULL) p2 = p2->next; p2->next = temp; } } fclose(fp1); return head;}void OUTPUT(Student* head){ printf("please enter the name of file you want to output:"); char name[50]; scanf("%s", name); getchar(); FILE * fp1; if ((fp1 = fopen(name, "a+")) == NULL) { printf("can't open this file!\n"); return; } Student* p1 = head; while (p1!=NULL)//也可用feof判断结尾 { fprintf(fp1,"%-10d%-10s%-10.1f%-10.1f%-10.1f%-10.1f\n", p1->number, p1->name, p1->English, p1->Chinese, p1->Math, p1->sum); p1 = p1->next; } fclose(fp1); return ;}Student* ORDER(Student* head){ Student* first = NULL,*new_head=NULL,*min,*p_last=head,*p_now; while (head != NULL) { for (p_now = head, min = head; p_now->next != NULL; p_now = p_now->next) { if (p_now->next->number < min->number) { p_last = p_now; min = p_now->next; } } if (first == NULL) { first = min; new_head = first; } else { first->next = min; first = first->next; } if (min == head) { head = head->next; } else { p_last->next = min->next; } } first-> next = NULL; head=new_head; return head;}//按编号排序void FREE(void){ Student* p; while (head) { p = head; head = head->next; free(p); }}
阅读全文
0 0
- 学生信息管理系统
- 学生学籍信息管理系统
- 学生信息管理系统
- 学生信息管理系统
- 学生成绩信息管理系统
- 学生信息管理系统
- 【学生信息管理系统 总结】
- 学生信息管理系统--毕业论文
- 学生信息管理系统
- 学生信息管理系统
- 学生信息管理系统~~~~~
- 学生信息管理系统
- 学生信息管理系统总结
- 学生信息管理系统
- 学生信息管理系统
- 学生信息管理系统
- netbeans 学生信息管理系统
- 学生信息管理系统
- CodeForces 567B
- Spark集群安装部署
- bzoj4719 [Noip2016]天天爱跑步
- MySQL创建数据库
- SSL访问+域名
- 学生信息管理系统
- HDU 1198
- 包含min函数的栈 -- 漫漫算法路 刷题篇
- 香港主机如何设置网站404页面
- MySQL中tinytext、text、mediumtext和longtext详解
- 如何学好图像处理——从小白到大神?
- ExpandableListView使用中的问题与解决
- js获取时间
- 九度 题目1040:Prime Number