设计一个班级同学的通讯录——答案

数据结构课程设计 班级通讯录 题目描述:以文本的方式保存用户录入的数据,并提供查询的功能共用户查询和使用通信录信息。 功能要求及说明: 通讯录要求实现最基本的功能,包括录入、删除、查找和修改,为此需要首先定义记录项的格式,其基本属性包括编号、姓名、性别、住址、联系电话等。整个系统由如下几大功能模块组成: (1)通讯录的建立;该模块主要完成将数据存储工作。记录可以从文本文件中读入,也可以从键盘逐条输入记录。 (2)通讯录 阅读详情

综合实验1:线性表的应用

一、实验目的

1、利用线性表的基本运算进行线性表的相关操作;

2、掌握文件的应用;

3、加深对链式存储数据结构的理解,逐步培养解决实际问题的编程能力。

二、实验环境

装有Visual C++6.0/CFree的计算机。

本次实验共计4学时。

三、实验内容

(以下内容三选一)

1、通讯录设计

设计一个班级同学的通讯录,要求如下:

  • 通讯录中每个同学的信息包含以下内容:学号(id)、姓名(name)、电话号码(tel)。如果需要更多其他信息,请自行添加。
  • 程序主菜单包含以下几个功能:
  1. 添加记录:通过键盘输入信息,添加一条通讯录记录。
  2. 删除记录:通过键盘输入学号,删除该学号的记录。
  3. 输出记录:输出通讯录全部记录。
  4. 按姓名查找:通过键盘输入姓名,输出该同学的所有信息。
  5. 保存记录:把通讯录中所有的记录保存到文件中。
  6. 清空记录:删除通讯录中的全部记录,并删除文件。
  7. 退出

提示:

  • 程序启动时应判断是否存在记录文件,如果存在,则读取每条记录到链表中。
  • 用户选择并完成主菜单某功能后,除了退出程序,应该返回主菜单。
  • 添加一条记录时,插入到链表的尾部。
  • 查找、删除记录时,如果该记录不存在,则应该输出不存在的提示。
  • 添加记录、删除记录时不需要写文件。
  • 保存记录时,用覆盖写文件的方法。(或者先删除原文件,再保存全部记录信息)
  • 各个功能模块写成函数,由主函数调用。

选做:

  • 主菜单增加一个排序功能选项,可以按照学号从小到大进行排序。排序方法可以用冒泡排序或者插入排序。

下面的代码在Dev-C++ 上获得通过;

英文版本请参照我的另一篇博客:https://blog.youkuaiyun.com/CHINA_CNN/article/details/102837088

#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<stdlib.h>
#include<windows.h> 
typedef struct Stu
{
long long id;//学生ID 
char name[10];//学生姓名 
long long tel;//学生电话号码 
struct Stu*next;//next链表指针 
}stud;//使用long long长整型是因为int和long的数据类型的长度不足以支持到11位 
FILE *fp; //文件指针,便于接下来对文件进行操作 
void CreLi(stud *&s)//以函数的形式创建链表,方便在主函数中直接调用 
{
s=(stud *)malloc(sizeof(stud));//分配空间 
s->next=NULL;//将头指为空 
}
void Loading(stud * &s,long long ID,char *Name,long long Tel)//将新建的数据以节点形式传入 
{//使用&是为了将载入数据的链表带回主函数 
stud *r,*t=s;//将t指为s,并用while函数指向其末尾; 
while(t->next!=NULL)
{
t=t->next;
}
r=(stud *)malloc(sizeof(stud));//为临时数据的临时节点分配空间 
r->id=ID;
strcpy(r->name,Name);
r->tel=Tel;
//以上三步将传入的值赋给临时节点 
r->next=NULL;//确保末尾指向空 
t->next=(stud*)malloc(sizeof(stud));//为t的下一节点分配空降 
t->next=r;//将临时变量的值赋给t链 
}
bool DeLi(stud * &s,long long ID) //删除记录
{
stud *r=s,*q,*pre=s;
r=r->next;
while(r!=NULL && r->id!=ID)//执行查找 
{
pre=pre->next;
r=r->next;
}
if(r==NULL){//未找到输出提示 
printf("Record does not exist\n");
return false;
}
else//找到则执行删除操作 
{
q=pre->next;//删除值赋给q 
pre->next=q->next;//踢掉待删值 
free(q);//删除完成 
printf("successfully delete\n");
return true;
}
}
void Show(stud *s) //输出联系人 
{
if(s!=NULL)
s=s->next;
if(s!=NULL)
{
while(s!=NULL)//疯狂循环,疯狂输出 
{ 
printf("ID\t\tName\tTel\n");
printf("%lld\t",s->id);
printf("%s\t",s->name);
printf("%lld\n\n",s->tel);
s=s->next;
}
if(s==NULL)
printf("Address book printed!\n");
}
else
{
printf("Address book is empty! Please add contacts first!\n");
}
}
bool NOS(stud *&s,char *Name) //按名字查找
{
stud *p,*pre=s;
p=s->next;
while(p!=NULL&&(strcmp(p->name,Name)))//名字对应查找 
{//strcmp用来判断字符串是否相等,即对链表的遍历 
pre=pre->next;
p=p->next;
}
if(p==NULL)
{
printf("The contact was not found in the address book!\n");
return false;
}
else
{
printf("ID\t\tName\tTel\n");
printf("%lld\t",p->id);
printf("%s\t",p->name);
printf("%lld\n\n",p->tel);
return true;
}
}
void Saving(stud * s) //将内存中的联系人文件存入本地磁盘 
{
fp=fopen("data.txt","w"); //打开文件 
//w是指:打开一个文本文件,清除原内容,写入文件。如果文件不存在,则会创建一个新文件。 
if(s!=NULL)
s=s->next;
while(s!=NULL)
{
fprintf(fp,"%s\t%lld\t%lld\n",s->name,s->id,s->tel);//写入文件,按行写入 
//分别以长整型,字符串,长整型写入txt文件中。 
s=s->next;//每写入一个联系人数据,就将链表指向下一节点。 
}
fclose(fp);//正确的关闭文件,确保真的写入数据 
}
void Empty(stud * &s) //清空记录
{
stud *p=s,*q=s;
p=p->next; 
if(p!=NULL)
q=p->next;//一前一后循环删除 
while(q!=NULL)
{
free(p);//清除临时节点 
p=q;//重给链值 
q=p->next;//指向下一待删节点 
}
free(p);//清除最后一次赋值 
s->next=NULL;//s最终指向空 
printf("Address Book clearance completed\n");
}
void Start(stud *s) // 初始化和载入文件中数据
{
system("color 07"); //屏幕、 字体颜色
char Name[10];
long long ID,Tel;
//a是以追加模式打开文件,不会清除原有数据,若没有,则新建 
fp=fopen("data.txt","a"); //就是为了确保文件没有时可以再建一个 
fclose(fp);
fp=fopen("data.txt","r");//读取原有文件 
while(fscanf(fp,"%s%lld%lld",Name,&ID,&Tel)!=EOF) //从文件中读入数据
Loading(s,ID,Name,Tel);//不停地将文件中的数据写入链表并传出。 
fclose(fp);//确保关闭 
printf("File data read status: read successfully!\n");
}
int main()
{
int n;
long long ID,Tel;
char Name[10];
stud *s;
CreLi(s);
Start(s);
printf("Please select the sequence number you want to operate:\n");
printf("=====  1. Add Records \t2. Delete records   \n");
printf("=====  3. Show record \t4. Search by name   \n");
printf("=====  5. Saving records6. Clear records \n");
printf("=====  7. Sign out\t\t\t\t \n");
while(~scanf("%d",&n))
{
if(n>=1&&n<=6){
switch(n)
{
case 1:
{
printf("Enter student id:\n");
scanf("%lld",&ID);
printf("Enter the name:\n");
scanf("%s",&Name);
printf("Enter phone number:\n");
scanf("%lld",&Tel); 
Loading(s,ID,Name,Tel);break;}
case 2:
{printf("Enter student id:\n");
scanf("%lld",&ID);
DeLi(s,ID);break;}
case 3:
{Show(s);break;}
case 4:
{printf("Enter the name:\n");
scanf("%s",&Name);
NOS(s,Name);break;}
case 5:
{Saving(s);printf("Data saved successfully\n");break;}
case 6:
{Empty(s);break;}
}
}
if(n==7)
{
printf("It's coming to an end. Just a moment, please.\n");
Sleep(3000); 
break;}
printf("=====  1. Add Records \t2. Delete records   \n");
printf("=====  3. Show record \t4. Search by name   \n");
printf("=====  5. Saving records6. Clear records \n");
printf("=====  7. Sign out\t\t\t\t \n");
}
return 0;
}

 

【C++】定义一个学生通讯录类,数据成员包括:学号、姓名、院系等【原创技术】 题目: 定义一个学生通讯录类,数据成员包括:学号、姓名、院系、通讯地址、电话;成员函数包括:输出各个数据成员的值,分别设置和获取各个数据成员的值。 源代码: //科目:C++实验4-2 //题目:定义一个学生通讯录类,数据成员包括:学号、姓名、院系、通讯地址、电话; //作者:武叶 //语言:C++ //创作时间:2012年4月16日 #include #include u 阅读详情

相关推荐

同学录项目分析

                                                                  同学录系统分析一、 本系统的结构图                 本班通告班级信息      班级信息(班长、副班长、成员、老师)                       访问次数排行(成员、访问次数、最后一次访问时间)          

kingrain1986的专栏 4978

C++课设通讯录管理系统(结构体)

c++课设通讯录管理系统(结构体)

m0_64048563的博客 3011

JSP+Bootstrap班级同学录网站:开箱即用的班级数字资产

班级同学录是教育信息化中典型的轻量级Web应用,其核心在于以低技术门槛实现信息聚合、身份认证与隐私可控的数据管理。基于JSP与Bootstrap的技术组合,虽不追求前沿框架,却凭借成熟稳定的运行机制、零依赖部署能力和面向非技术人员的交互设计,在中小学及高校校友场景中展现出极强的实用价值。它依托MySQL持久化存储,通过Session基础鉴权与分级可见性策略保障数据安全,支持Excel批量导入、PDF通讯录导出、关键词模糊搜索等刚需功能,特别适配班主任、班委等无专职IT支持的用户群体。本文详解的kaic.zi

weixin_29015801的博客 296

C++课设通讯录管理系统(类与对象)

此代码为本人课设作业,小白一枚,还望大佬指正。 题目:通讯录管理系统 以本班同学的具体数据为背景,设计一个本班同学通讯录。 1. 设计要求: (1)学生通讯录基本信息包括:学号、姓名、性别、年龄、电话号码、家庭地址、备注等。 (2)使用类和对象的概念实现程序设计。 (3)将学生通讯录基本信息保存到文件,所有操作都针对文件中的数据。 (4)程序算法说明清晰,理论分析与计算正确,运行情况良好,实验测试数据无误,容错性强(能对错误输入进行判断控制)。 (5)编程风格良好(包括缩进、空行、适当注

m0_64048563的博客 7650

解压即用的班级同学录网页:数据替换、部署与避坑指南

静态网页是无需后端即可运行的技术方案,由 HTML、CSS 和 JavaScript 三部分组成,数据与样式分离是其核心设计思想。借助数据文件驱动页面渲染,无需数据库即可维护通讯录和照片墙。这类页面部署灵活、可长期保存,适合班级纪念页、毕业回顾、社团展示等场景。以解压即用的同学录网页模板为例,可以快速完成通讯录数据、照片墙、主题色和背景音乐的替换,并通过本地服务器预览、GitHub Pages 发布。同时,编码不一致、路径写错、浏览器自动播放限制等常见坑也值得提前规避。掌握这些,零基础也能为班级搭建一个可分

weixin_32631179的博客 196

静态网站生成器实战:用VuePress与GitHub Pages构建班级同学录

静态网站生成器是一种将源文件(如Markdown、HTML、CSS)预渲染为纯HTML、CSS、JavaScript文件的工具,其核心原理是通过模板和数据在构建时生成最终页面,而非在用户访问时动态生成。这项技术因其极致的访问速度、卓越的安全性(无数据库攻击面)和近乎为零的服务器成本,在技术领域展现出巨大价值,尤其适合文档、博客、产品展示页及内容更新不频繁的应用。在工程实践中,结合GitHub Pages等免费托管平台,它能快速搭建可全球访问的网站。本文以创建一个承载集体记忆的线上同学录为具体应用场景,详细阐

weixin_34129696的博客 349

【开题答辩全过程】以 高校班级同学录网站为例,包含答辩的问题和答案

本文介绍了一位拥有14年经验的毕业设计指导专家,擅长Java、Python等多种编程语言及相关开发项目。以"高校班级同学录网站"为例,展示了从开题到答辩的全过程,包括系统功能模块(论坛、相册、问卷等)、技术架构(Java+MySQL+B/S)、权限管理方案等重点内容。答辩环节详细记录了评委就选题意义、技术选型、数据库设计等关键问题的提问及回答要点,并提供了开题报告撰写建议和参考资源。文章最后还提供了毕设选题指导和开题报告获取渠道。

shiji3076的博客 902

天翼同学录系统全栈源码发布(免虚拟目录版)

开发完成≠可用。真正的考验在于能否稳定运行在服务器上。我们采用 Docker 容器化部署,确保“本地能跑,线上也能跑”。“天翼同学录”不是一个炫技项目,它的意义在于:用合理的技术手段,解决真实存在的教育管理难题。它告诉我们:轻量化不等于简陋,反而更考验设计功力;安全不是后期补丁,而是贯穿始终的思维;可维护性比“快”更重要,因为系统要活五年、十年;真正优秀的产品,是让人感觉不到技术的存在。未来,我们可以继续拓展:- 加入人脸识别自动匹配学生;

weixin_30633869的博客 441

【开题答辩全过程】以 基于JAVA的学生通讯录的设计与实现为例,包含答辩的问题和答案

本文介绍了一位14年经验的毕设指导专家,擅长Java、PHP等多种编程语言和项目开发。重点展示了一个基于JAVA的学生通讯录系统毕业设计案例,采用B/S架构,包含校友前台和管理员后台两大模块。系统解决了校友联系困难、信息分散等问题,采用班级验证码机制确保用户真实性,使用乐观锁处理并发操作。答辩问答环节详细讨论了技术选型、数据库设计、测试方案等关键问题。最后提供了毕业设计指导建议:可参考往届真实开题报告,建议独立完成毕设,如需选题、开题报告或源码参考可联系获取专业帮助。

shiji3076的博客 393

n个同学建立一个通讯录,包括学号、姓名、年龄、电话、寝室等个人信息

通讯录:为n个同学建立一个通讯录,包括学号、姓名、年龄、电话、寝室等个人信息, 能够按照某些关键信息(例如学号、姓名)进行查询、排序、分类并将显示结果。 题目要求 1.类的定义:从题目中发现对象,将其抽象为类; 2.封装:对数据成员和成员函数的定义,从而实现屏蔽的特性; 3.函数:C++中定义函数,用来实现某个功能 4.泛型:泛型包括泛型容器和泛型算法。

哈希表之班级同学

班级同学名字通过哈希表实现,班级同学名字通过哈希表实现,班级同学名字通过哈希表实现,

【开题答辩全过程】以 班级网站的设计与实现为例,包含答辩的问题和答案

本文介绍了一位具有14年经验的技术专家,擅长Java、Python等多种编程语言,提供毕业设计定制开发、代码讲解等服务。重点展示了一个班级网站毕业设计案例,系统采用Java+MySQL技术栈,实现通知、活动报名、班费管理等五大功能。答辩过程中,评委针对系统安全性、并发控制等提出专业问题,学生给出了使用MD5加盐、版本控制等解决方案。专家建议毕业设计应注重实用性和技术可行性,提供开题报告参考和源码支持服务。全文展示了完整的毕业设计答辩流程和技术要点,为即将开题的学生提供实用参考。

sheji3416的博客 418

数据结构课程设计-班级通讯录

数据结构课程设计(C语言版)--班级通讯录,有需要的可以下载。有代码、封面、课程设计报告、及评分表。

基于SpringBoot+Vue的班级管理系统毕业设计全攻略

在Web开发学习路径中,管理系统类项目始终是连接基础语法与工程实践的重要桥梁。从业务角度看,任何管理系统都围绕数据增删改查、角色权限和流程审批展开,班级管理系统正是这一模式的典型代表。它涉及学生、课程、考勤、成绩等多类数据实体,天然具备多角色协作特征,适合作为毕业设计或项目练手的载体。技术上,SpringBoot简化了后端服务搭建,Vue提供高效的前端交互,MySQL负责数据持久化,三者组合构成了当前主流的全栈开发范式。通过实现JWT认证、MyBatis-Plus数据操作、路由守卫等核心机制,开发者能深入理

weixin_29227425的博客 152

数据结构哈希表实验报告

大二实验课时做的 ... void CHash() /*创建哈希表*/ {int i,adr,sum,k; hl.sizeindex=L; for(i=0;i<L;i++) /*哈希表清空*/ {hl.elem[i].name=""; hl.elem[i].sn=0; } for(i=0;i<N;i++) /*输入N个元素*/ {sum=1; k=Key(l[i].name); /*求关键字*/ adr=Adr(k); /*求哈希表地址*/ if(!hl.elem[adr].sn) /*判断地址单元是否为空*/ {hl.elem[adr].name=l[i].name; hl.elem[adr].sn=sum; hl.count++; } else /*地址冲突,则查找下一个地址*/ {do {di=suiji(); k+=di; adr=Adr(k); sum=sum+1; }while(hl.elem[adr].sn!=0); hl.elem[adr].name=l[i].name; hl.elem[adr].sn=sum; hl.count++; } } }

<202505高项>《【VIP合集】 软考高项(第四版)十大知识域、五大过程组、ITTO输入输出工具、项目绩效域》

软考高项(第四版)十大知识域、五大过程组、ITTO输入输出工具、项目绩效域

Else 的博客 1856

C语言程序设计课程设计任务书(10题)[2023-12-25]

假定有n门课程,每门课程有:课程编号,课程名称,课程性质(公共课、必修课、选修课),总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。(5)统计模块:可以根据学号统计该生共有多少条考勤信息,并统计出有多少次迟到,早退,请假和旷课。要求考勤信息至少包含,序号(记录的序号),学号,姓名,日期,第几节课,课程名称,缺课类型(迟到、早退、请假及旷课)。要求商品信息至少包含,商品编号,商品名称,商品单价,商品库存,商品类型(如饮料,图书,衣服等)等信息。

程序设计 994

深入解析Simulink中的条件执行子系统:If Action与Switch Case的实战应用

本文深入解析了Simulink中两种核心的条件执行子系统:If Action Subsystem与Switch Case Action Subsystem。通过实战案例详细阐述了其工作原理、正确搭建方法以及与逻辑控制器(If模块/Switch Case模块)的协同机制,帮助工程师实现清晰、可维护的多分支逻辑控制,并规避常见建模错误。

l3m4n的博客 429

JavaWeb校友录系统实战:SSM框架下的数据库设计与权限控制

在Web应用开发中,数据库设计是决定系统稳定性和扩展性的基石。无论是企业级管理系统还是课程设计项目,清晰的数据模型都能有效规避后续业务逻辑混乱的问题。本文从关系型数据库的表结构设计入手,讲解如何以班级为核心组织用户、动态与留言等数据,并阐述MD5加盐加密、登录拦截、角色权限控制等Web开发中的关键技术原理。这些技术不仅适用于校友录系统,也广泛适用于社区、CRM等需要用户组织与内容沉淀的场景。通过一个基于SSM框架(Spring MVC + MyBatis + MySQL)的JavaWeb校友录系统,完整演示

weixin_34005090的博客 250

STM32F407实现LwIP的MQTT客户端并连接到服务器

这个是用LwIP协议栈中自带的MQTT客户端API写成的,代码注释很详细,附带有服务端的展示。LwIP版本是2.1.2.

wait_for_STM32的博客 6397

Vivado加上VsCode让你的生活更美好

VsCode与Vivado的灵活使用 引言 ​ 现在大二了,在接触硬件描述语言。Vivado自带的编辑器实在很难用,为了能够“极客”一些,当然是去Google了一下有哪些方法可以取而代之。 ​ 网络上的答案大同小异,基本上都是用的Sublime Text.(我的学长们也几乎都是) 平时码代码的过程中,我习惯与使用VsCode,尤其是在微软收购GitHub之后,Code 简直就是神器了。于是乎…一个...

qq_39498701的博客 10万+

基于Vue+Node+MySQL的同学录网站搭建实战

在数字化时代,如何将散落的集体记忆聚合为可持续运营的线上社区?本文从这一普遍痛点切入,以低并发、重内容的Web应用为典型场景,系统讲解前后端分离架构下同学录网站的设计与实现。文章从数据库表结构设计、RESTful API开发到Nginx部署上线,完整梳理了成员信息管理、照片缩略图处理、时光胶囊等核心功能的技术原理,并针对权限分级、并发写冲突、备份策略等工程实践给出可复用方案。无论你是为班级、校友会还是兴趣小组搭建纪念平台,亦或希望掌握Vue3与Node.js的组合开发流程,都能从中获得从需求拆解到部署上线的

weixin_30737899的博客 98

【实战指南】从零构建UNet多分类分割数据集:标注、转换与训练全流程

本文提供了一份从零构建UNet多分类分割数据集的完整实战指南。详细介绍了使用Labelme进行图像标注的核心技巧与规范,并通过Python脚本将标注结果转换为模型可用的VOC格式。最后,指导如何修改经典的PyTorch版UNet代码,以适配自定义数据集并进行训练与测试,帮助读者完成从数据准备到模型训练的全流程。

arduino9maker的博客 288
上一篇: JAVA新手翻车之路
下一篇: 括号匹配检验(含/**/双字节符号)即数据结构3.18.b答案(Pearson版)
报的算无敌
博客等级 码龄12年 300粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值