学生信息管理

C语言编程实习 《学生信息管理软件》设计和调试 一. 目的 学会C语言编程的基本步骤和环节,能够设计和编写简单的面向过程的C语言程序,为为进一步学习复杂的软件技术奠定必要的基础。 二.主要练习内容 (1) 在掌握基本C语言的基础上,进一步巩固C语言基础知识; a) 指针的理解和使用; b) 链表的操作; c) 文件的操作(文本文件和二进制文件); d) 人机交互的设计。 (2) 学习程序设计的一般方法; a) 软件工程的基本概念; b) 功能分析、功能(业务)流程图及功能结构图; c) 详细设计与程序流程图; (3) 编译和程序调试方法 d) 编译错误的分析和纠错; e) 程序调试方法。 三.实习题目 设计并实现一个学生信息管理工具软件,管理一个班的学生的基本信息。每个学生的信息名片包含的主要信息有:姓名、职务、单位、固定电话、手机、E-Mail、等。要求该软件: 1、 用链表实现学生信息的管理,每个学生的的信息保存到链表节点中。 2、 具有添加新学生信息的功能。 3、 具有删除功能。对查询的结果,可以选择学号来删除某个学生的信息; 4、 具有查询功能,查询显示某个学生的信息; 5、 具有修改特定学生信息的功能; 6、 具有显示所有学生信息的功能; 7、 系统完成每个学生的信息的添加、删除和修改后,需要及时保存到文件中,以防数据的丢失。 8、 程序启动时需要加载文件中的数据到新的链表中。 9、 程序具有人机交互功能,系统显示信息列表整齐、清晰,有提示。 (这里是主要的功能,你可以用自己的话,更简化地表达) 四.系统的功能流程图和功能结构图设计 画一下系统总的流程图,怎么画可以看看书,可以手画可以机画。 五.程序分析和调试经验总结 1、 程序分析 挑一个子程序对其原理进行说明。简单说明,不要找复杂的函数讲。 2、 调试经验总结

#include <stdio.h> #include <stdlib.h> #include <string.h> struct student { …… }; struct student *create() { ……… } void print( student *head) { ……….. } void main() { char ch; struct student *head; while(1) { printf("/t/t/t/t学生信息系统/n"); printf("/t1 创建学生信息联表/n"); ……. scanf(" %c",&ch); switch(ch) { case '1': head=create(); break; case '2': print(head); break; ……….. default: printf("/nPlease Enter Choice between 1 and 7"); break; } } 部分函数说明: p1=(struct student *)malloc(sizeof(struct student)); //这里创建了一个节点 printf("请输入姓名,电话,中间用空格隔开/n"); scanf("%s %d",&p1->name,&p1->age); 1. sizeof ( type-name ):求type-name数据类型在存中所占大小(字节数),返回字节数。 2. printf()、scanf():参考C语言书。 3. printf() 4. void *malloc( size_t size ):malloc returns a void pointer to the allocated space, or NULL if there is insufficient memory available. 因为返回的是空指针,所以用(struct student *)进行强制类型转换,变成一个指向student类型的指针。 5. int strcmp( const char *string1, const char *string2 ); Parameters string1, string2 Null-terminated strings to compare Libraries All versions of the C run-time libraries. Return Value The return value for each of these functions indicates the lexicographic relation of string1 to string2. Value Relationship of string1 to string2 < 0 string1 less than string2 0 string1 identical to string2 > 0 string1 greater than string2 Remarks The strcmp function compares string1 and string2 lexicographically and returns a value indicating their relationship.

#include <stdio.h> #include <stdlib.h> #include <string.h> struct Student { char id[10]; char name[10]; char work[10]; char add[10]; char tel[10]; char phone[10]; char email[20]; Student* next; }; struct Student *head; FILE * fp; void create(Student* &head) { if(NULL != (head = (Student*) malloc(sizeof(Student)))) { head->next = NULL; printf("创建成功!/n"); } else { printf("创建失败!/n"); exit(0); } } void print( Student *head) { Student* p = head->next; while(NULL != p) { printf("****************/n"); printf("id:%s/n", p->id); printf("name:%s/n", p->name); printf("word:%s/n", p->work); printf("address:%s/n", p->add); printf("tel:%s/n", p->tel); printf("phone:%s/n", p->phone); printf("email:%s/n", p->email); p= p->next; } } void add(Student* head) { Student* tmp = (Student*) malloc(sizeof(Student)); printf("id:"); scanf("%s", tmp->id); printf("name:"); scanf("%s", tmp->name); printf("work:"); scanf("%s",tmp->work); printf("address:"); scanf("%s",tmp->add); printf("tel:"); scanf("%s",tmp->tel); printf("phone:"); scanf("%s",tmp->phone); printf("email:"); scanf("%s",tmp->email); Student * tail = head; while(tail->next != NULL) tail= tail->next; tail->next = tmp; tail = tmp; tail->next = NULL; } void query() { Student* p = head->next; printf("输入查找学生学号:/n"); char key[10]; scanf("%s", key); while(NULL != p && 0 != strcmp(key, p->id)) { p= p->next; } if(NULL == p) printf("查无此人!/n"); else { printf("该学生信息:/n"); printf("id:%s/n", p->id); printf("name:%s/n", p->name); printf("word:%s/n", p->work); printf("address:%s/n", p->add); printf("tel:%s/n", p->tel); printf("phone:%s/n", p->phone); printf("email:%s/n", p->email); } } void modify() { Student* p = head->next; printf("输入欲修改学生学号:/n"); char key[10]; scanf("%s", key); while(NULL != p && 0 != strcmp(key, p->id)) { p= p->next; } if(NULL == p) printf("查无此人!/n"); else { printf("该学生信息:/n"); printf("id:%s/n", p->id); printf("name:%s/n", p->name); printf("word:%s/n", p->work); printf("address:%s/n", p->add); printf("tel:%s/n", p->tel); printf("phone:%s/n", p->phone); printf("email:%s/n", p->email); printf("输入该学生新信息:/n"); printf("id:"); scanf("%s", p->id); printf("name:"); scanf("%s", p->name); printf("work:"); scanf("%s",p->work); printf("address:"); scanf("%s",p->add); printf("tel:"); scanf("%s",p->tel); printf("phone:"); scanf("%s",p->phone); printf("email:"); scanf("%s",p->email); } } void del() { printf("输入欲删除学生学号:/n"); char key[10]; scanf("%s", key); Student* p = head; Student* q = p->next; while(NULL != q && 0 != strcmp(key, q->id)) { p= p->next; q = q->next; } if(NULL == q) printf("查无此人!/n"); else { printf("该学生信息:/n"); printf("id:%s/n", q->id); printf("name:%s/n", q->name); printf("word:%s/n", q->work); printf("address:%s/n", q->add); printf("tel:%s/n", q->tel); printf("phone:%s/n", q->phone); printf("email:%s/n", q->email); printf("确认删除(y/else)/n"); getchar(); char ch; scanf("%c", &ch); if('y' == ch || 'Y' == ch) { p->next = q->next; free(q); printf("已删除!/n"); } } } void in() { if(NULL==(fp = fopen("c:/info.txt","r"))) { printf("文件导入失败!/n"); } else { create(head); Student * r = head; while(!feof(fp)) { Student* tmp = (Student*) malloc(sizeof(Student)); fscanf(fp, "%s", tmp->id); fscanf(fp, "%s", tmp->name); fscanf(fp, "%s", tmp->work); fscanf(fp, "%s", tmp->add); fscanf(fp, "%s", tmp->tel); fscanf(fp, "%s", tmp->phone); fscanf(fp, "%s", tmp->email); r->next = tmp; r = tmp; } r->next = NULL; fclose(fp); printf("导入成功!/n"); } } void out() { fp = fopen("c:/info.txt", "w+"); Student* p = head->next; while(NULL != p) { fprintf(fp,"%s/n", p->id); fprintf(fp,"%s/n", p->name); fprintf(fp,"%s/n", p->work); fprintf(fp,"%s/n", p->add); fprintf(fp,"%s/n", p->tel); fprintf(fp,"%s/n", p->phone); if(NULL == p->next) fprintf(fp,"%s", p->email); else fprintf(fp,"%s/n", p->email); p = p->next; } if(0 == fclose(fp)) printf("保存成功!/n"); else { printf("保存失败/n"); exit(0); } } void main() { char ch; while(1) { printf("/t/t/t/t学生信息系统/n"); printf("/t1 创建学生信息链表/n"); printf("/t2 导入文件/n"); printf("/t3 显示学生信息/n"); printf("/t4 添加新学生/n"); printf("/t5 查询学生/n"); printf("/t6 修改学生/n"); printf("/t7 删除学生/n"); printf("/t8 保存/n"); printf("/t0 退出/n"); scanf(" %c",&ch); switch(ch) { case '1': system("cls"); create(head); system("pause"); system("cls"); main(); break; case '2': system("cls"); in(); system("pause"); system("cls"); main(); break; case '3': system("cls"); print(head); system("pause"); system("cls"); main(); break; case '4': system("cls"); add(head); system("cls"); system("pause"); system("cls"); main(); break; case '5': system("cls"); query(); system("pause"); system("cls"); main(); break; case '6': system("cls"); modify(); system("pause"); system("cls"); main(); break; case '7': system("cls"); del(); system("pause"); system("cls"); main(); break; case '8': system("cls"); out(); system("pause"); system("cls"); main(); break; case '0': printf("Thank you , bye~/n"); exit(0); break; default: printf("/nPlease Enter Choice between 0 and 8"); system("pause"); system("cls"); main(); break; } } }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值