数据结构课程设计
来源:互联网 发布:macbook air装windows 编辑:程序博客网 时间:2024/06/13 07:46
1.头文件
#ifndef JC_H_INCLUDED#define JC_H_INCLUDED#include <stdio.h>#include <stdlib.h>#include <string.h>#include<windows.h>#define MAXID 10#define MAXNAME 20#define MAXCOURSE 3/* 学生数据结构 */typedef struct node{ char id[20]; char name[15]; int score[MAXCOURSE]; int sum; node() { sum=0; } double average; struct node *next;} Student;/* 头指针 */Student *head = NULL;/*课程名称*/char ClassName[MAXCOURSE][20]= {"数学","英语","计算机"};#endif // JC_H_INCLUDED
2.主函数
#include"jc.h"/* 菜单 */int Menu(){ system("cls"); fflush(stdin); printf(" 计算机146-1 傅军超 201458506145 \n"); printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); printf("************学生成绩管理系统****************\n"); printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); printf(" 1-初始化\n"); printf(" 2-输入学生信息\n"); printf(" 3-打印全部学生信息\n"); printf(" 4-查找学号或姓名删除学生信息\n"); printf(" 5-按姓名查找学生信息\n"); printf(" 6-按学号查找学生信息\n"); printf(" 7-计算班级总人数\n"); printf(" 8-插入学生信息到链表中\n"); printf(" 0-退出\n"); return 0;}/*初始化*/Student *Init(){ Student *head; head=(Student *)malloc(sizeof(Student)); head->next=NULL; return head;}/*检查学号*/char Check_ID(char *s){ int i; if(strlen(s)==0||strlen(s)>MAXID) return 0; for(i=0; i<strlen(s); i++) { if (s[i] > '0' && s[i] < '9') return 1; } return 0;}/*检查姓名*/char Check_Name(char *s){ int i; if(strlen(s)==0||strlen(s)>MAXNAME) return 0; for(i=0; i<strlen(s); i++) { if((s[i] >= 'a' && s[i] < 'z') || (s[i] >= 'A' && s[i] <= 'Z')) return 1; } return 0;}/*检查分数*/int Check_Score(int s){ if( s>=0 && s<=100 ) return 1; return 0;}/*检查学号是否相同*/char Is_SameID(char *s){ Student *p= head->next; while(p!=NULL) { if(strcmp(s,p->id)==0) return 1; p=p->next; } return 0;}/* 输入学生信息 */void Input_Score(Student *p){ /* 学号 */ printf("\n请输入学号: "); do { gets(p->id); if (!Check_ID(p->id)) { printf("输入不正确!请重新输入学号: "); } else if (Is_SameID(p->id)) { printf("存在已学号!请重新输入学号: "); } } while (!(Check_ID(p->id) && !Is_SameID(p->id))); /* 姓名 */ printf("请输入姓名: "); do { gets(p->name); if (!Check_Name(p->name)) { printf("输入不正确!请重新输入姓名: "); } } while (!Check_Name(p->name)); //输入成绩 int i; for(i=0; i<MAXCOURSE; i++) { do { printf("请输入%s成绩:",ClassName[i]); scanf("%d", &p->score[i]); if(!Check_Score(p->score[i])) printf("输入成绩不正确!\n请重新输入%s成绩:",ClassName[i]); } while(!Check_Score(p->score[i])); } p->average = -1; p->sum = -1;}/* 头插法插入节点 */void Insert_Before(){ Student *s =(Student*) malloc(sizeof(Student)); Input_Score(s); s->next = head->next; head->next = s;}/*输出学生成绩信息*/void Output_Score(Student *p){ int i; printf("\n姓名:%s, 学号:%s \n",p->name,p->id); for(i=0; i<MAXCOURSE; i++) { printf("%s成绩:%d ",ClassName[i],p->score[i]); }}/*删除节点q*/void Del_Node(Student *q){ Student *p=head; while(p->next!=q) { p=p->next; } p->next=q->next; free(q);}/*插入学生成绩*/void Insert_List(){ int x; printf("输入你要插入的学生数:"); scanf("%d",&x); while(x!=0) { getchar(); Student *p =(Student*) malloc(sizeof(Student)); printf("\n请输入学号: "); do { gets(p->id); if (!Check_ID(p->id)) { printf("输入不正确!请重新输入学号: "); } else if (Is_SameID(p->id)) { printf("存在已学号!请重新输入学号: "); } } while (!(Check_ID(p->id) && !Is_SameID(p->id))); /* 姓名 */ printf("请输入姓名: "); do { gets(p->name); if (!Check_Name(p->name)) { printf("输入不正确!请重新输入姓名: "); } } while (!Check_Name(p->name)); //输入成绩 int i; for(i=0; i<MAXCOURSE; i++) { fflush(stdin); printf("请输入%s成绩:",ClassName[i]); scanf("%d", &p->score[i]); do { if(!Check_Score(p->score[i])) printf("输入成绩不正确!请重新输入%s成绩:",ClassName[i]); } while(!Check_Score(p->score[i])); } p->average = -1; p->sum = -1; p->next = head->next; head->next = p; x--; }}/*按学号查找*/Student *Search_ID(char *id){ Student *p=head->next; while(p!=NULL) { if(strcmp(p->id,id)==0)break; p=p->next; } return p;}/*按姓名查找节点*/Student *Search_Name(char *name){ Student *p=head->next; while(p!=NULL) { if(strcmp(p->name,name)==0)break; p=p->next; } return p;}/*输出链表*/void Output_List(){ Student *p; p=head->next; while(p!=NULL) { Output_Score(p); p=p->next; }}/*删除指定学生信息*/void Del_Student(){ Student *p; fflush(stdin); char str[15]; char judge[10]; printf("请输入要删除的学生的 学号或姓名:"); do { gets(str); if(!(Check_ID(str)||Check_Name(str))) { printf("输入错误!请重新输入:"); } } while(!(Check_ID(str)||Check_Name(str))); //判断是否为学号还是姓名 if(str[0]>'0'&&str[0]<'9') { p=Search_ID(str); if(p==NULL) { printf("此学号不存在!\n"); } else { Output_Score(p); printf("是否要删除此学号!(确认按y,任意键取消):"); gets(judge); if(strcmp(judge,"y")==0) { Del_Node(p); printf("删除成功!"); } } } else { p=Search_Name(str); if(p==NULL) { printf("此姓名不存在!\n"); } else { Output_Score(p); printf("是否要删除此姓名!(确认按y,任意键取消):"); gets(judge); if(strcmp(judge,"y")==0) { Del_Node(p); printf("删除成功!"); } } fflush(stdin); }}/* 退出 */void Quit(){ exit(0);}/*计算班级总人数*/int Count_People(){ Student *p; int people=0; p=head->next; while(p!=NULL) { people=people+1; p=p->next; } return people;}/*计算班级平均分*//*void Count_Mark(){ Student *p; int m; float avecla=0; p=head->next; while(p!=NULL) { avecla=avecla+p->sum; p=p->next; } m=Count_People(); printf("班级平均分为:%.2f",avecla/m);}*//*比较成绩大小*//*Student *Descby_English(Student *Newhead,Student *sort){ Student *p,*q; p=Newhead; while(p!=NULL) { if(sort->sum > p->sum) break; q=p; p=p->next; } if(p==Newhead) { sort->next = p; return sort; } else { q->next = sort; sort->next = p; return Newhead; }}*//*按总分或平均分降序排列*//*void Descend_English(){ Student *p,*q,*Newhead; int i,j=1,people; Newhead = NULL; p = head; while(p != NULL) { q = p->next; Newhead = Descby_English(Newhead,p); p = q; } if(p == head) printf("学生信息库为空!!!\n"); else { p = Newhead->next; people=Count_People(); printf("按总分和平均分排序如下:\n"); while(p!=NULL) { if(j<=people) { printf("第%d名 ",j); printf("姓名:%s 学号:%s ",p->name,p->id); for(i=0; i<=people-1; i++) { printf("%s:%d ",ClassName[i],p->score[i]); } printf("总分:%d 平均分:%.2f ",p->sum,p->average); } j++; printf("\n"); p=p->next; } }}*//*按姓名查找学生成绩*/void *Searchname_Student(){ char name[10]; int i=0; Student *p=head->next; getchar(); printf("请输入你要查找的学生姓名:"); do { gets(name); if(!Check_Name(name)) printf("输入姓名不正确!重新输入:"); } while(!Check_Name(name)); while(p!=NULL) { if(strcmp(p->name,name)==0) { Output_Score(p); i=1; } p=p->next; } if(i==0) { printf("找不到此姓名!"); }}/*按学号查找学生成绩*/void *SearchID_Student(){ char id[10]; int i=0; Student *p=head->next; getchar(); printf("请输入你要查找的学生学号:"); do { gets(id); if(!Check_ID(id)) printf("输入学号不正确!重新输入:"); } while(!Check_ID(id)); while(p!=NULL) { if(strcmp(p->id,id)==0) { Output_Score(p); i=1; } p=p->next; } if(i==0) { printf("找不到此学号!"); }}/*主函数*/int main(){ int x,n,people; // Student *q; Menu(); while(1) { printf("\n请输入命令编号: "); scanf("%d", &x); switch(x) { case 1: //初始化 head = Init(); printf("初始化成功!!!\n"); break; case 2: //输入成绩 getchar(); while(n!=0) { Insert_Before(); // printf("输入序号:"); scanf("%d",&n); getchar(); } break; case 3: //打印出所有成绩 Output_List(); break; case 4: Del_Student(); break; case 5: //按姓名查找学生成绩 Searchname_Student(); break; case 6: //按学号查找学生成绩 SearchID_Student(); break; case 7: //计算班级人数 people=Count_People(); printf("班级总人数为:%d \n",people); break; case 8: /*插入学生成绩*/ Insert_List(); break; case 0: /*结束*/ Quit(); break; default: printf("输入错误!\n\n"); } }}
0 0
- 数据结构课程设计
- 数据结构课程设计
- 课程设计----数据结构
- 数据结构课程设计
- 数据结构课程设计
- 数据结构课程设计
- 数据结构课程设计
- 数据结构课程设计
- 数据结构课程设计
- 《数据结构》课程设计
- 数据结构课程设计
- 数据结构课程设计
- 数据结构课程设计
- 数据结构课程设计
- 数据结构课程设计
- 数据结构课程设计
- 数据结构课程设计
- 数据结构 课程设计
- selenium-server-standalone.jar无法启动
- iOS 常用计算宏
- Mysql 数据备份
- red5+rtmp 篇1
- Android黄色警告汇总
- 数据结构课程设计
- 在Eclipse添加Android兼容包( v4、v7 appcompat )
- 94.Examine the structure of the PROGRAMS table:
- js动态提示输入框剩余字符数
- 结构型:设计模式之适配器模式(六)
- 【HTML第二本】HTML.5与CSS.3权威指南 HTML5部分读书笔记
- 寒江独钓前辈的第一个例子的部分分析
- Shell脚本获取格式化日期与时间总结
- leetcode:88 Merge Sorted Array-每日编程第三十一题