学生信息管理系统(四)演示文稿

时间:2014-04-20 02:48:39
【文件属性】:
文件名称:学生信息管理系统(四)演示文稿
文件大小:1.93MB
文件格式:PPT
更新时间:2014-04-20 02:48:39
C语言 学生信息管理系统 PPT 学生信息管理系统(四)演示文稿 #include #include #include #include #define NULL 0 #define LEN sizeof(struct student) #define FILE_DATA_PATH "c:\student.txt" struct student { long int num; char name[20]; int age; char sex[4]; char birthday[10]; char address[30]; long int tele_num; char E_mail[20]; struct student *next; }; int TOTAL_NUM = 0; struct student *head = NULL; void welcome(); void mainmenu(); void record(); void display(struct student *stu); void displayAll(); void query(); void query_by_num(); void query_by_name(); void readData(); void writeData(); void freeAll(); void change(); void devise(struct student *p); int main() { char userName[9]; char userPWD[7]; int i; welcome(); for(i = 0; i < 3; i++) { printf("\n管理员初始用户名和密码均为zjj\n"); printf("请输入您的用户名:"); scanf("%s", userName); printf("\n请输入您的密码:"); scanf("%s", userPWD); if ((strcmp(userName,"zjj")==0) && (strcmp(userPWD,"zjj")==0)) { //用户名和密码正确,显示主菜单 mainmenu(); break; } else { if (i < 2) { //用户名或密码错误,提示用户重新输入 printf("用户名或密码错误,请重新输入!"); } else { //连续3次输错用户名或密码,退出系统。 printf("您已连续3次将用户名或密码输错,系统将退出!"); } } } return 0; } //显示欢迎信息 void welcome() { printf("+---------------------------+\n"); printf("| |\n"); printf("| 欢迎使用学生信息管理系统 |\n"); printf("| |\n"); printf("+---------------------------+\n"); } //系统主菜单 void mainmenu() { int choice; choice = -1; readData(); printf("\n温馨提示:为保证您的操作得到保存,请按正常顺序退出系统^_^\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+ [0]----退出系统 |\n"); printf("\t\t\t+*·*·*·*·*·*·*·*·*·*·|\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; case3: change(); break; default: printf("\n无效选项!"); break; } } while(choice != 0); } //录入学生信息 void record() { struct student *p0; p0 = (struct student *)malloc(LEN); printf("请输入学生的学号:"); scanf("%ld",&p0->num); printf("请输入学生的姓名:"); scanf("%s",p0->name); printf("请输入学生的年龄:"); scanf("%d",&p0->age); printf("请输入学生的性别:"); scanf("%s",p0->sex); printf("请输入学生的出生年月:"); scanf("%s",p0->birthday); printf("请输入学生的地址:"); scanf("%s",p0->address); printf("请输入学生的电话:"); scanf("%ld",&p0->tele_num); printf("请输入学生的E-mail:"); scanf("%s",p0->E_mail); insert(p0); printf("该学生的信息为:\n"); printf("-------------------------------------------------------------------------------"); printf("学号\t姓名\t年龄\t性别\t出生年月\t\t地址\t电话\tE-mail\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; else p2->next = p0; p0->next = p1; } else { p1->next = p0; p0->next = NULL; } } TOTAL_NUM++; } void display(struct student *p) { printf("%ld\t%s\t%d\t%s\t%s\t%s\t%ld\t%s\n", p->num, p->name, p->age, p->sex, p->birthday, p->address, p->tele_num, p->E_mail); } //浏览学生信息 void displayAll() { struct student *p; printf("学生总数:%d\n", TOTAL_NUM); p = head; if(head != NULL) { printf("\n学号\t姓名\t年龄\t性别\t出生年月\t地址\t电话\tE-mail\n"); printf("-------------------------------------------------------------------------------"); do { display(p); p = p->next; } while(p != NULL); } printf("\n"); } //写入文件 void writeData() { FILE* fp;//文件指针 struct student *p; fp = fopen(FILE_DATA_PATH, "w"); if (!fp) { printf("文件打开错误!"); return; } fprintf(fp,"%d\n", TOTAL_NUM); for(p = head; p!= NULL; p= p->next) { fprintf(fp,"%ld\t%s\t%d\t%s\t%s\t%s\t%ld\t%s\n", p->num, p->name, p->age, p->sex, p->birthday, p->address, p->tele_num, p->E_mail); } 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(FILE_DATA_PATH, "r"); if (!fp) { printf("文件打开错误!"); return 0; } fscanf(fp,"%d\n", &TOTAL_NUM); head = p1 = p2 = (struct student *)malloc(LEN); fscanf(fp,"%ld\t%s\t%d\t%s\t%s\t%s\t%ld\t%s\n", &p1->num, p1->name, &p1->age, p1->sex, p1->birthday, p1->address, &p1->tele_num, p1->E_mail); while(!feof(fp)) { p1 = (struct student *)malloc(LEN); fscanf(fp,"%ld\t%s\t%d\t%s\t%s\t%s\t%ld\t%s\n", &p1->num, p1->name, &p1->age, p1->sex, p1->birthday, p1->address, &p1->tele_num, p1->E_mail); p2->next = p1; p2 = p1; } p2->next = NULL; fclose(fp); } //修改学生信息 void change() { 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) devise(p1); else printf("没有该学生记录,请核对!\n"); } void devise(struct student *p) { int choice; choice = -1; do { printf("请选择您要修改的学生的信息内容:\n"); printf("+----------------------+\n"); printf("| 姓名 请按 1 |\n"); printf("| 年龄 请按 2 |\n"); printf("| 性别 请按 3 |\n"); printf("| 出生年月 请按 4 |\n"); printf("| 地址 请按 5 |\n"); printf("| 电话 请按 6 |\n"); printf("| E-mail 请按 7 |\n"); printf("| 取消 请按 0 |\n"); printf("+----------------------+\n"); printf("请输入您的选择:"); scanf("%d", &choice); switch(choice) { case 0: return; case 1: printf("请输入新姓名:"); scanf("%s", p->name); break; case 2: printf("请输入新年龄:"); scanf("%d", &p->age); break; case 3: printf("请输入新性别:"); scanf("%s", p->sex); break; case 4: printf("请输入新出生年月:"); scanf("%s", p->birthday); break; case 5: printf("请输入新地址:"); scanf("%s", p->address); break; case 6: printf("请输入新电话:"); scanf("%ld", &p->tele_num); break; case 7: printf("请输入新E-mail:"); scanf("%s", p->E_mail); break; default: printf("\n无效选项!"); break; } } while(choice != 0); }

网友评论