记录进入大学后写的的第一个课设:
学生成绩管理系统
#include<stdio.h> #include<stdlib.h> #include<string.h> struct student //定义一个学生信息的结构体 { ?? ?char name[20];//姓名? ?? ?int age;//年龄? ?? ?char sex[5];//性别? ?? ?int id;//学号? ?? ?int score ;//成绩? }; //创建链表 struct Node { ?? ?struct student data; ?? ?struct Node*next; }; struct Node* addlist() { ?? ?//指针--->变量 ?动态内存申请 ?? ?struct Node*head =(struct Node*)malloc(sizeof(struct Node)); ?? ?//表头:做差异化处理 数据域 data 不做初始化 ?? ?head->next=NULL; ?? ?return head; } //创建节点(把学生的数据变成结构体变量)? struct Node * addNode(struct student data) { ?? ?struct Node*newN = (struct Node*)malloc(sizeof(struct Node)); ?? ?newN->data=data; ?? ?newN->next=NULL; ?? ?return newN; } //插入 void insert(struct Node*head,struct student data) { ?? ?struct Node* newNode = addNode(data);? ? ? ? ? ? ?? ?? ?newNode->next=head->next;? ? ? ? ? ? ? ? ? ? ?? ?? ?head->next= newNode;? ? ? ? ? ? ? ? ? ? ? ? //打印链表 void dayinlist(struct Node*head) { ?? ?struct Node*p=head->next; ?? ?printf("姓名\t年龄\t性别\t学号\t成绩\n"); ?? ?while(p) ?? ?{ ?? ??? ?printf("%s\t%d\t%s\t%d\t%d\n",p ->data.name, p->data.age, p->data.sex, p->data.id, p->data.score); ?? ??? ?p=p->next; ?? ?} ?? ?printf("\n"); } //搜索链表 struct Node* search(struct Node*head,char *name) { ?? ?struct Node * p=head->next; ?? ?if(p==NULL) ?? ?{ ?? ??? ?printf("无此学生!!!\n"); ?? ?} ?? ?while(strcmp( p->data.name,name )==0) ?? ?{ ?? ??? ?p=p->next; ?? ?} ? ?return p; } //删除链表:指定位置删除? void deleteNode(struct Node* head ,char *name) { ?? ?struct Node* pNode =head->next; ?? ?struct Node* pfNode=head; ?? ?if(pNode==NULL) ?? ?{ ?? ??? ?printf("无此学生!!!\n"); ?? ??? ?return; ?? ?} ?? ?while(strcmp(pNode->data.name,name)) ?? ?{ ?? ??? ?pfNode=pNode; ?? ??? ?pNode=pfNode->next; ? ? ? ? ??? ?? ??? ?if(pNode == NULL) ?? ??? ?{ ?? ??? ??? ?printf("未找到!!!\n"); ?? ??? ??? ?return; ?? ??? ?} ?? ??? ? ?? ?} ? ? ? ? pfNode->next = pNode->next; ?? ??? ?free(pNode); ?? ??? ?printf("删除成功!\n");? } //读文件
void read(struct Node *head, char *filename) { ?? ?//C语言文件操作就是调用函数 ?? ?FILE *fp;//FILE是变量类型,用于文件,声明了一个指针,用来指向FILE类型的对象。? ?? ?struct student data; ?? ?fp = fopen (filename,"r");//第一次运行打开失败 ?r:不具有创建功能? ?? ?if(fp == NULL) ?? ?{ ?? ??? ?fp=fopen(filename,"w+");//w方式具有创建文件功能? ?? ?}
? ?while (fscanf(fp, "%s\t%d\t%s\t%d\t%d\n",data.name,&data.age,data.sex,&data.id,&data.score)!=EOF)//End Of File 文件结束符 { ?? ?insert(head,data); }
fclose(fp); //关闭一个流,如果流成功关闭,fclose 返回 0,否则返回EOF(-1)。 //如果流为NULL,而且程序可以继续执行,fclose设定error number给EINVAL,并返回EOF。 } //写文件 void write(struct Node* head, char *filename) { ?? ?FILE *fp; ?? ?fp = fopen(filename,"w"); ?? ?struct Node*p =head->next; ?? ?while(p) ?? ?{ ?? ??? ?fprintf(fp,"%s\t%d\t%s\t%d\t%d\n",p ->data.name, p->data.age, p->data.sex, p->data.id, p->data.score); ?? ??? ?p=p -> next; ?? ?} ?? ?fclose(fp); } //按成绩排序 void sort(struct Node*head) { ?? ?int t = 0; ?? ?char m[10]; ?? ?for (Node* temp = head->next; temp->next != NULL; temp = temp->next) ?? ?{ ? ? ? ? for (Node* p = head->next; p->next != NULL; p = p->next) ?? ??? ?{ ? ? ? ? ? ? if (p->data.score > p->next->data.score) ?? ??? ??? ?{ ? ? ? ? ? ? ? ? t = p->data.score;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? p->data.score = p->next->data.score;? ?? ? ? ? ? ? ? ? ? p->next->data.score = t;? ? ? ? ? ? ? ? ? ?? ??? ??? ??? ?t=p->data.age;? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ??? ??? ??? ?p->data.age = p->next->data.age;? ? ? ? ? ? ? ? ? ? ? ? ? p->next->data.age = t;? ? ? ? ? ? ? ? ?? ?? ??? ??? ??? ?t=p->data.id; ?? ??? ??? ??? ?p->data.id = p->next->data.id; ? ? ? ? ? ? ? ? p->next->data.id = t; ?? ??? ??? ??? ?strcpy(m,p->data.name );//把字符串p->data.name拷贝到中m ?? ??? ??? ??? ?strcpy(p->data.name,p->next->data.name); ?? ??? ??? ??? ?strcpy(p->next->data.name,m); ?? ??? ??? ??? ?strcpy(m,p->data.sex ); ?? ??? ??? ??? ?strcpy(p->data.sex,p->next->data.sex); ?? ??? ??? ??? ?strcpy(p->next->data.sex,m); ? ? ? ? ? ? }?? ??? ??? ??? ??? ??? ? ? ? ? ? } ?? ??? ? ?? ?}?? ? ?? ?dayinlist(head); ?? ?return ; } //修改信息 void xiugai(struct Node*head) { ? int m; ? ? int x=0; ?? ?struct Node * q = head->next; ?? ?printf("请输入需要修改的学生的学号:"); ?? ?scanf("%d",&m); ?? ?if(q->data.id == m && q != NULL) ?? ?{ ?? ?printf("学号:%d 姓名: %s 年龄: %d 性别:%s 成绩:%d\n",q->data.id,q->data.name,q->data.age,q->data.sex,q->data.score); ? ? printf("请输入修改后的学号:\n"); ?? ?scanf("%d",&q->data.id); ?? ?printf("请输入修改后的姓名:\n"); ?? ?scanf("%s",&q->data.name); ?? ?printf("请输入修改后的年龄:\n"); ?? ?scanf("%d",&q->data.age); ?? ?printf("请输入修改后的性别:\n"); ?? ?scanf("%s",&q->data.sex); ?? ?printf("请输入修改后的成绩:\n"); ?? ?scanf("%d",&q->data.score); ?? ?printf("修改完成!\n"); ?? ?printf("修改后的学号:%d 姓名: %s 年龄: %d 性别:%s 成绩:%d\n",q->data.id,q->data.name,q->data.age,q->data.sex,q->data.score); ? ? } ? ? else ? ? { ? ? ?? ?printf("未找到信息!!\n"); ?? ??? ?system("pause"); ?? ?} ?? ?return ; } //主页? void menu() { ?? ?printf("==================================================\n"); ?? ?printf("================[学生成绩管理系统]================\n"); ?? ?printf("==================================================\n"); ?? ?printf("==\t\t ? 0.退出系统 ?\t\t\t==\n"); ?? ?printf("==\t\t ? 1.搜索信息 ?\t\t\t==\n"); ?? ?printf("==\t\t ? 2.增加信息 ?\t\t\t==\n"); ?? ?printf("==\t\t ? 3.删除信息 ?\t\t\t==\n"); ?? ?printf("==\t\t ? 4.修改信息 ?\t\t\t==\n"); ?? ?printf("==\t\t ? 5.成绩排序 ?\t\t\t==\n"); ?? ?printf("==\t\t ? 6.浏览信息 ?\t\t\t==\n"); ?? ?printf("==================================================\n"); ?? ?printf("==================================================\n"); } struct Node*list= addlist(); void ch() { ?? ?int a=0; ?? ?struct student data; ?? ?struct Node* p=NULL;? ?? ?scanf("%d",&a); ?? ?switch(a) ?? ?{ ?? ?case 0 : ?? ??? ?printf("已退出系统!下次再见!"); ?? ??? ?exit(0); ?? ??? ??? ?break ; ?? ?case 1: ?? ??? ?printf("==================[搜索信息]================\n"); ?? ??? ?char name1[10];? ?? ??? ?printf("请输入搜索学生姓名:"); ?? ??? ?scanf("%s",name1); ?? ??? ?p=search(list,data.name); ?? ? ? ?if(strcmp( p->data.name,name1 )==0) ?? ??? ?{ ?? ??? ??? ?printf("姓名\t年龄\t性别\t学号\t成绩\n"); ?? ??? ? ? ?printf("%s\t%d\t%s\t%d\t%d\n",p ->data.name,p->data.age,p->data.sex,p->data.id,p->data.score); ?? ? ? ?} ?? ? ? ?else ?? ? ? ?{ ?? ??? ??? ?printf("未找到信息!!\n"); ?? ??? ??? ?system("pause"); ?? ??? ?} ?? ??? ?break ; ?? ?case 2 : ?? ??? ?printf("==================[增加信息]================\n"); ? ? ? ? int n,i; ?? ? ? ?printf("请输入要输入学生的个数:\n"); ?? ? ? ?scanf("%d",&n); ? ? ??? ?for(i=1;i<=n;i++) ? ? ?? ?{ ?? ? ? ? ?printf("姓名,年龄,性别,学号,成绩:\n"); ?? ? ? ? ?fflush(stdin); ?? ? ? ? ?scanf("%s%d%s%d%d",data.name,&data.age,data.sex,&data.id,&data.score); ?? ??? ? ?insert(list,data); ?? ??? ?} ? ? ?? ?printf("增加成功!\n"); ? ? ? ? break ; ?? ?case 3: ?? ??? ?printf("==================[删除信息]================\n"); ?? ??? ?printf("请输入学生姓名:"); ?? ??? ??? ?scanf("%s",data.name); ?? ??? ??? ?deleteNode(list,data.name); ?? ??? ?break ; ?? ?case 4: ?? ??? ?printf("==================[修改信息]================\n"); ?? ??? ?xiugai(list); ?? ??? ?break ; ?? ?case 5: ?? ??? ?printf("==================[成绩排序]================\n"); ?? ??? ?sort(list); ?? ??? ?break; ?? ?case 6: ?? ??? ?printf("==================[浏览信息]================\n"); ?? ??? ?dayinlist(list); ?? ??? ?break ; ?? ?default: ?? ??? ?printf("输入有误,请重新输入!!"); ?? ??? ?system("pause"); ?? ??? ?break; ?? ?} ?? ?write(list,"2.txt"); } int main() { ?? ?read(list,"2.txt"); ?? ?while(1) ?? ?{ ?? ? ? menu(); ?? ? ? ch(); ?? ? ? system("pause"); ?? ? ? system("cls"); ?? ?} ?? ?system("pause"); ?? ?return 0;
}
运行效果演示:
================================================== ==================[学生成绩管理系统] ================= ================================================== ==? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?0.退出系统? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? == ==? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1.搜索信息? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? == ==? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2.增加信息? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??== ==? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?3.删除信息? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? == ==? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?4.修改信息? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? == ==? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?5.成绩排序? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? == ==? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?6.浏览信息? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? == ================================================== ==================================================
2
==================[增加信息]================ 请输入要输入学生的个数: 2 姓名,年龄,性别,学号,成绩: zhang 18 ? ?nu ? ?009 ? 80 姓名,年龄,性别,学号,成绩: huan ?19 ? ?nan ? 007 ? 90 增加成功! 请按任意键继续. . .
6
==================[浏览信息]================ 姓名 ? ?年龄 ? ?性别 ? ?学号 ? ?成绩 huan ? ?19 ? ? ?nan ? ? 7 ? ? ? 90 zhang ? 18 ? ? ?nu ? ? ?9 ? ? ? 80
请按任意键继续. . .
4
==================[修改信息]================ 请输入需要修改的学生的学号:007 学号:7 姓名: haun 年龄: 19 性别:nan 成绩:90 请输入修改后的学号: 008 请输入修改后的姓名: zhuo 请输入修改后的年龄: 18 请输入修改后的性别: nu 请输入修改后的成绩: 70 修改完成! 修改后的学号:8 姓名: zhuo 年龄: 18 性别:nu成绩:70 请按任意键继续. . .
5 ==================[成绩排序]================ 姓名 ? ?年龄 ? ?性别 ? ?学号 ? ?成绩 zhuo ? ?18 ? ? ?nuu ? ? 8 ? ? ? 70 zhang ? 18 ? ? ?nu ? ? ?9 ? ? ? 80
请按任意键继续. . .
3 ==================[删除信息]================ 请输入学生姓名:zhang 删除成功! 请按任意键继续. . .
第一次写课设,存在很多bug,以后会继续努力。
|